diff --git a/app/src/main/java/org/houxg/leamonax/ui/LaunchActivity.java b/app/src/main/java/org/houxg/leamonax/ui/LaunchActivity.java index e00d1c3..cb70c34 100644 --- a/app/src/main/java/org/houxg/leamonax/ui/LaunchActivity.java +++ b/app/src/main/java/org/houxg/leamonax/ui/LaunchActivity.java @@ -1,10 +1,18 @@ package org.houxg.leamonax.ui; +import android.Manifest; import android.animation.Animator; import android.app.Activity; +import android.content.DialogInterface; import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Build; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v13.app.ActivityCompat; +import android.support.v7.app.AlertDialog; import android.view.WindowManager; +import android.widget.Toast; import org.houxg.leamonax.R; import org.houxg.leamonax.model.Account; @@ -12,13 +20,56 @@ import org.houxg.leamonax.network.ApiProvider; import org.houxg.leamonax.service.AccountService; public class LaunchActivity extends Activity { - + final int PERMISSIONS_REQUEST_CODE=19919; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_launch); + if(Build.VERSION.SDK_INT >= 23){ + if(hasPermission( + Manifest.permission.CAMERA , + Manifest.permission.WRITE_EXTERNAL_STORAGE , + Manifest.permission.READ_EXTERNAL_STORAGE , + Manifest.permission.READ_PHONE_STATE + )){ + doAfterGetPermission(); + }else { + AlertDialog.Builder builder=new AlertDialog.Builder(LaunchActivity.this); + builder.setMessage(getString(R.string.permission_get_description)); + builder.setTitle(getString(R.string.permission_denied)); + builder.setPositiveButton(getString(R.string.allow), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + requestPermission(PERMISSIONS_REQUEST_CODE, + Manifest.permission.CAMERA , + Manifest.permission.WRITE_EXTERNAL_STORAGE , + Manifest.permission.READ_EXTERNAL_STORAGE , + Manifest.permission.READ_PHONE_STATE + ); + } + }); + builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + finish(); + } + }); + builder.setCancelable(false).create().show(); + } + }else { + doAfterGetPermission(); + } + + } + + @Override + public void onBackPressed() { + + } + + private void doAfterGetPermission(){ final Intent intent; if (AccountService.isSignedIn()) { Account account = Account.getCurrent(); @@ -55,8 +106,42 @@ public class LaunchActivity extends Activity { }).start(); } - @Override - public void onBackPressed() { - + public boolean hasPermission(String... permissions){ + for (String permission : permissions) { + if (ActivityCompat.checkSelfPermission(this, permission) + != PackageManager.PERMISSION_GRANTED) { + return false; + } + } + return true; } + + public void requestPermission(int requestCode, String... permissions) { + ActivityCompat.requestPermissions(this, permissions, requestCode); + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + switch (requestCode) { + case PERMISSIONS_REQUEST_CODE: + if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ + if(hasPermission(Manifest.permission.CAMERA , + Manifest.permission.WRITE_EXTERNAL_STORAGE , + Manifest.permission.READ_EXTERNAL_STORAGE , + Manifest.permission.READ_PHONE_STATE )){ + doAfterGetPermission(); + }else { + Toast.makeText(LaunchActivity.this,getString(R.string.permission_get_error),Toast.LENGTH_SHORT).show(); + finish(); + } + }else { + Toast.makeText(LaunchActivity.this,getString(R.string.permission_get_error),Toast.LENGTH_SHORT).show(); + this.finish(); + } + default: + break; + } + } + } diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index f7194c1..6d23acf 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -114,4 +114,8 @@ 空目录(最顶层目录) 网络不可用,将在下次同步时删除 没有找到 + 获取权限失败,程序启动失败 + 我们需要一些权限来启动应用,请给予我们这些应用。请放心,我们保证只会申请必要的权限,并保证绝不泄露用户隐私信息 + 权限申请 + 允许 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 100248a..8e1faa0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -116,4 +116,8 @@ Empty directory Network is unavailable, these notes will be deleted in next sync Not found + Permission fetch failed, application exit + We need some permission to start the application + Permission request + allow