diff --git a/app/build.gradle b/app/build.gradle index 44e7786..4e547fe 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' android { compileSdkVersion 31 @@ -17,7 +18,7 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } - + compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 diff --git a/app/src/main/java/com/wangzhen/permission/sample/MainActivity.kt b/app/src/main/java/com/wangzhen/permission/sample/MainActivity.kt index f7a883a..dad48a0 100644 --- a/app/src/main/java/com/wangzhen/permission/sample/MainActivity.kt +++ b/app/src/main/java/com/wangzhen/permission/sample/MainActivity.kt @@ -1,83 +1,88 @@ -package com.wangzhen.permission.sample; +package com.wangzhen.permission.sample -import android.Manifest; -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Toast; +import android.Manifest +import android.os.Bundle +import android.util.Log +import android.view.View +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import com.wangzhen.permission.PermissionManager.request +import com.wangzhen.permission.callback.AbsPermissionCallback -import androidx.appcompat.app.AppCompatActivity; - -import com.wangzhen.permission.PermissionManager; -import com.wangzhen.permission.callback.AbsPermissionCallback; - -public class MainActivity extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - addFragment(); +/** + * MainActivity + * Created by wangzhen on 2021/11/18. + */ +class MainActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + addFragment() } - private void addFragment() { - getSupportFragmentManager().beginTransaction().add(R.id.container, new SampleFragment()).commitAllowingStateLoss(); + private fun addFragment() { + supportFragmentManager.beginTransaction().add(R.id.container, SampleFragment()) + .commitAllowingStateLoss() } - public void onClick(View view) { - switch (view.getId()) { - case R.id.btn_storage: - requestStorage(); - break; - case R.id.btn_sms: - requestSMS(); - break; + fun onClick(view: View) { + when (view.id) { + R.id.btn_storage -> requestStorage() + R.id.btn_sms -> requestSMS() } } - private void requestSMS() { - PermissionManager.request(this, new AbsPermissionCallback() { - @Override - public void onGrant(String[] permissions) { - for (String permission : permissions) { - Log.e("TAG", "onGrant permissions -> " + permission); + private fun requestSMS() { + request( + this, + object : AbsPermissionCallback() { + override fun onGrant(permissions: Array) { + for (permission in permissions) { + Log.e("TAG", "onGrant permissions -> $permission") + } + Toast.makeText(this@MainActivity, "短信权限已全部授予", Toast.LENGTH_SHORT).show() } - Toast.makeText(MainActivity.this, "短信权限已全部授予", Toast.LENGTH_SHORT).show(); - } - @Override - public void onDeny(String[] deniedPermissions, String[] neverAskPermissions) { - for (String permission : deniedPermissions) { - Log.e("TAG", "onDeny deniedPermissions -> " + permission); - } - for (String permission : neverAskPermissions) { - Log.e("TAG", "onDeny neverAskPermissions -> " + permission); + override fun onDeny( + deniedPermissions: Array, + neverAskPermissions: Array + ) { + for (permission in deniedPermissions) { + Log.e("TAG", "onDeny deniedPermissions -> $permission") + } + for (permission in neverAskPermissions) { + Log.e("TAG", "onDeny neverAskPermissions -> $permission") + } + Toast.makeText(this@MainActivity, "短信权限部分或全部被拒绝", Toast.LENGTH_SHORT).show() } - Toast.makeText(MainActivity.this, "短信权限部分或全部被拒绝", Toast.LENGTH_SHORT).show(); - } - }, Manifest.permission.SEND_SMS, Manifest.permission.RECEIVE_SMS, Manifest.permission.READ_SMS); + }, + Manifest.permission.SEND_SMS, + Manifest.permission.RECEIVE_SMS, + Manifest.permission.READ_SMS + ) } - private void requestStorage() { - PermissionManager.request(this, new AbsPermissionCallback() { - @Override - public void onGrant(String[] permissions) { - for (String permission : permissions) { - Log.e("TAG", "onGrant permissions -> " + permission); + private fun requestStorage() { + request(this, object : AbsPermissionCallback() { + override fun onGrant(permissions: Array) { + for (permission in permissions) { + Log.e("TAG", "onGrant permissions -> $permission") } - Toast.makeText(MainActivity.this, "存储权限已全部授予", Toast.LENGTH_SHORT).show(); + Toast.makeText(this@MainActivity, "存储权限已全部授予", Toast.LENGTH_SHORT).show() } - @Override - public void onDeny(String[] deniedPermissions, String[] neverAskPermissions) { - for (String permission : deniedPermissions) { - Log.e("TAG", "onDeny deniedPermissions -> " + permission); + override fun onDeny( + deniedPermissions: Array, + neverAskPermissions: Array + ) { + for (permission in deniedPermissions) { + Log.e("TAG", "onDeny deniedPermissions -> $permission") } - for (String permission : neverAskPermissions) { - Log.e("TAG", "onDeny neverAskPermissions -> " + permission); + for (permission in neverAskPermissions) { + Log.e("TAG", "onDeny neverAskPermissions -> $permission") } - Toast.makeText(MainActivity.this, "存储权限部分或全部被拒绝", Toast.LENGTH_SHORT).show(); + Toast.makeText(this@MainActivity, "存储权限部分或全部被拒绝", Toast.LENGTH_SHORT).show() } - }, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE); + }, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE) } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/wangzhen/permission/sample/SampleFragment.kt b/app/src/main/java/com/wangzhen/permission/sample/SampleFragment.kt index 95c47cb..cfee56f 100644 --- a/app/src/main/java/com/wangzhen/permission/sample/SampleFragment.kt +++ b/app/src/main/java/com/wangzhen/permission/sample/SampleFragment.kt @@ -1,67 +1,67 @@ -package com.wangzhen.permission.sample; +package com.wangzhen.permission.sample -import android.Manifest; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.wangzhen.permission.PermissionManager; -import com.wangzhen.permission.callback.AbsPermissionCallback; +import android.Manifest +import com.wangzhen.permission.PermissionManager.request +import android.view.LayoutInflater +import android.view.ViewGroup +import android.os.Bundle +import android.util.Log +import android.view.View +import com.wangzhen.permission.sample.R +import com.wangzhen.permission.PermissionManager +import com.wangzhen.permission.callback.AbsPermissionCallback +import android.widget.Toast +import androidx.fragment.app.Fragment +import java.lang.StringBuilder /** * SampleFragment * Created by wangzhen on 2020/4/15. */ -public class SampleFragment extends Fragment implements View.OnClickListener { - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View inflate = inflater.inflate(R.layout.fragment_sample, container, false); - inflate.findViewById(R.id.btn_call).setOnClickListener(this); - return inflate; +class SampleFragment : Fragment(), View.OnClickListener { + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + val inflate = inflater.inflate(R.layout.fragment_sample, container, false) + inflate.findViewById(R.id.btn_call).setOnClickListener(this) + return inflate } - @Override - public void onClick(View v) { - PermissionManager.request(this, new AbsPermissionCallback() { - @Override - public void onGrant(String[] permissions) { - for (String permission : permissions) { - Log.e("TAG", "onGrant permissions -> " + permission); + override fun onClick(v: View) { + request(this, object : AbsPermissionCallback() { + override fun onGrant(permissions: Array) { + for (permission in permissions) { + Log.e("TAG", "onGrant permissions -> $permission") } - Toast.makeText(getContext(), "电话权限已全部授予", Toast.LENGTH_SHORT).show(); + Toast.makeText(context, "电话权限已全部授予", Toast.LENGTH_SHORT).show() } - @Override - public void onDeny(String[] deniedPermissions, String[] neverAskPermissions) { - for (String permission : deniedPermissions) { - Log.e("TAG", "onDeny deniedPermissions -> " + permission); + override fun onDeny( + deniedPermissions: Array, + neverAskPermissions: Array + ) { + for (permission in deniedPermissions) { + Log.e("TAG", "onDeny deniedPermissions -> $permission") } - for (String permission : neverAskPermissions) { - Log.e("TAG", "onDeny neverAskPermissions -> " + permission); + for (permission in neverAskPermissions) { + Log.e("TAG", "onDeny neverAskPermissions -> $permission") } - Toast.makeText(getContext(), "电话权限部分或全部被拒绝", Toast.LENGTH_SHORT).show(); + Toast.makeText(context, "电话权限部分或全部被拒绝", Toast.LENGTH_SHORT).show() } - @Override - public void onNotDeclared(String[] permissions) { - StringBuilder builder = new StringBuilder(); - for (String permission : permissions) { - if (builder.length() > 0) { - builder.append("、"); + override fun onNotDeclared(permissions: Array) { + val builder = StringBuilder() + for (permission in permissions) { + if (builder.isNotEmpty()) { + builder.append("、") } - builder.append(permission); - Log.e("TAG", "onNotDeclared permissions -> " + permission); + builder.append(permission) + Log.e("TAG", "onNotDeclared permissions -> $permission") } - Toast.makeText(getContext(), builder.toString() + "未在清单文件声明", Toast.LENGTH_SHORT).show(); + Toast.makeText(context, builder.toString() + "未在清单文件声明", Toast.LENGTH_SHORT).show() } - }, Manifest.permission.CALL_PHONE, Manifest.permission.READ_PHONE_STATE); + }, Manifest.permission.CALL_PHONE, Manifest.permission.READ_PHONE_STATE) } -} +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index c41fa5d..146d7a3 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:4.1.3' - + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/library/build.gradle b/library/build.gradle index f9c0b9a..c67083c 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -1,8 +1,10 @@ -apply plugin: 'com.android.library' +plugins { + id 'com.android.library' + id 'kotlin-android' +} android { compileSdkVersion 31 - defaultConfig { minSdkVersion 17 targetSdkVersion 31 @@ -10,18 +12,25 @@ android { versionName "1.0" consumerProguardFiles 'consumer-rules.pro' } - buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } - + lintOptions { + abortOnError false + } + kotlinOptions { + jvmTarget = '1.8' + } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.activity:activity:1.4.0' + + implementation 'androidx.core:core-ktx:1.7.0' + implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.31" } diff --git a/library/src/main/java/com/wangzhen/permission/PermissionManager.kt b/library/src/main/java/com/wangzhen/permission/PermissionManager.kt index ed2e243..e684526 100644 --- a/library/src/main/java/com/wangzhen/permission/PermissionManager.kt +++ b/library/src/main/java/com/wangzhen/permission/PermissionManager.kt @@ -1,51 +1,68 @@ -package com.wangzhen.permission; +package com.wangzhen.permission -import static com.wangzhen.permission.common.Common.FRAGMENT_TAG; - -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.Build; -import android.provider.Settings; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import androidx.fragment.app.FragmentManager; - -import com.wangzhen.permission.callback.PermissionCallback; -import com.wangzhen.permission.callback.PermissionOperate; -import com.wangzhen.permission.fragment.PermissionFragment; -import com.wangzhen.permission.util.Utils; +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Build +import android.provider.Settings +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import com.wangzhen.permission.callback.PermissionCallback +import com.wangzhen.permission.callback.PermissionOperate +import com.wangzhen.permission.common.Common.FRAGMENT_TAG +import com.wangzhen.permission.fragment.PermissionFragment +import com.wangzhen.permission.util.Utils.getFragmentActivity /** * PermissionManager * Created by wangzhen on 2020/4/15. */ -public final class PermissionManager { - private static final PermissionManager sInstance; +object PermissionManager { - static { - sInstance = new PermissionManager(); + @JvmStatic + fun request( + fragment: Fragment?, + callback: PermissionCallback?, + vararg permissions: String + ) { + request(fragment?.activity, callback, *permissions) } - public static void request(Fragment fragment, PermissionCallback callback, String... permissions) { - request(fragment.getActivity(), callback, permissions); - } - - public static void request(Context context, PermissionCallback callback, String... permissions) { - request(Utils.getFragmentActivity(context), callback, permissions); + @JvmStatic + fun request(context: Context?, callback: PermissionCallback?, vararg permissions: String) { + context?.let { ctx -> + request( + getFragmentActivity(ctx) as FragmentActivity, callback, *permissions + ) + } } - public static void request(FragmentActivity activity, PermissionCallback callback, String... permissions) { + @JvmStatic + fun request( + activity: FragmentActivity, + callback: PermissionCallback?, + vararg permissions: String + ) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - sInstance.requestPermission(activity, callback, permissions); + requestPermission(activity, callback, *permissions) } else { - if (callback != null) { - callback.onGrant(permissions); - } + callback?.onGrant(arrayOf(*permissions)) } } + /** + * get intent to application details setting page + * + * @param context context + * @return intent + */ + @JvmStatic + fun getSettingIntent(context: Context): Intent { + val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) + intent.data = Uri.parse("package:" + context.packageName) + return intent + } + /** * start permission request * @@ -53,28 +70,20 @@ public final class PermissionManager { * @param callback callback * @param permissions permissions */ - private void requestPermission(FragmentActivity activity, PermissionCallback callback, String... permissions) { - FragmentManager manager = activity.getSupportFragmentManager(); - Fragment tag = manager.findFragmentByTag(FRAGMENT_TAG); - PermissionFragment fragment; - if (tag instanceof PermissionOperate) { - fragment = (PermissionFragment) tag; + private fun requestPermission( + activity: FragmentActivity, + callback: PermissionCallback?, + vararg permissions: String + ) { + val manager = activity.supportFragmentManager + val tag = manager.findFragmentByTag(FRAGMENT_TAG) + val fragment: PermissionFragment + if (tag is PermissionOperate) { + fragment = tag as PermissionFragment } else { - fragment = new PermissionFragment(); - manager.beginTransaction().add(fragment, FRAGMENT_TAG).commitAllowingStateLoss(); + fragment = PermissionFragment() + manager.beginTransaction().add(fragment, FRAGMENT_TAG).commitAllowingStateLoss() } - ((PermissionOperate) fragment).exeRequestPermissions(permissions, callback); - } - - /** - * get intent to application details setting page - * - * @param context context - * @return intent - */ - public static Intent getSettingIntent(Context context) { - Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - intent.setData(Uri.parse("package:" + context.getPackageName())); - return intent; + (fragment as PermissionOperate).exeRequestPermissions(arrayOf(*permissions), callback) } -} +} \ No newline at end of file diff --git a/library/src/main/java/com/wangzhen/permission/callback/AbsPermissionCallback.kt b/library/src/main/java/com/wangzhen/permission/callback/AbsPermissionCallback.kt index 5f21a05..e43a5f1 100644 --- a/library/src/main/java/com/wangzhen/permission/callback/AbsPermissionCallback.kt +++ b/library/src/main/java/com/wangzhen/permission/callback/AbsPermissionCallback.kt @@ -1,12 +1,9 @@ -package com.wangzhen.permission.callback; +package com.wangzhen.permission.callback /** - * abstract implementation of {@link PermissionCallback} + * abstract implementation of [PermissionCallback] * Created by wangzhen on 2020/4/16. */ -public abstract class AbsPermissionCallback implements PermissionCallback { - @Override - public void onNotDeclared(String[] permissions) { - - } -} +abstract class AbsPermissionCallback : PermissionCallback { + override fun onNotDeclared(permissions: Array) {} +} \ No newline at end of file diff --git a/library/src/main/java/com/wangzhen/permission/callback/PermissionCallback.kt b/library/src/main/java/com/wangzhen/permission/callback/PermissionCallback.kt index eefa865..0f6e556 100644 --- a/library/src/main/java/com/wangzhen/permission/callback/PermissionCallback.kt +++ b/library/src/main/java/com/wangzhen/permission/callback/PermissionCallback.kt @@ -1,16 +1,16 @@ -package com.wangzhen.permission.callback; +package com.wangzhen.permission.callback /** * PermissionCallback * Created by wangzhen on 2020/4/15. */ -public interface PermissionCallback { +interface PermissionCallback { /** * all permissions are granted * * @param permissions permissions */ - void onGrant(String[] permissions); + fun onGrant(permissions: Array) /** * permissions are denied or refused @@ -18,12 +18,12 @@ public interface PermissionCallback { * @param deniedPermissions denied permissions * @param neverAskPermissions refused permissions */ - void onDeny(String[] deniedPermissions, String[] neverAskPermissions); + fun onDeny(deniedPermissions: Array, neverAskPermissions: Array) /** * permissions not declared in manifest * * @param permissions permissions */ - void onNotDeclared(String[] permissions); -} + fun onNotDeclared(permissions: Array) +} \ No newline at end of file diff --git a/library/src/main/java/com/wangzhen/permission/callback/PermissionOperate.kt b/library/src/main/java/com/wangzhen/permission/callback/PermissionOperate.kt index 56500a5..d8d4b62 100644 --- a/library/src/main/java/com/wangzhen/permission/callback/PermissionOperate.kt +++ b/library/src/main/java/com/wangzhen/permission/callback/PermissionOperate.kt @@ -1,9 +1,9 @@ -package com.wangzhen.permission.callback; +package com.wangzhen.permission.callback /** * PermissionOperate * Created by wangzhen on 2020/4/15. */ -public interface PermissionOperate { - void exeRequestPermissions(String[] permissions, PermissionCallback callback); -} +interface PermissionOperate { + fun exeRequestPermissions(permissions: Array, callback: PermissionCallback?) +} \ No newline at end of file diff --git a/library/src/main/java/com/wangzhen/permission/common/Common.kt b/library/src/main/java/com/wangzhen/permission/common/Common.kt index 79317ba..886bf56 100644 --- a/library/src/main/java/com/wangzhen/permission/common/Common.kt +++ b/library/src/main/java/com/wangzhen/permission/common/Common.kt @@ -1,9 +1,9 @@ -package com.wangzhen.permission.common; +package com.wangzhen.permission.common /** * Common * Created by wangzhen on 2020/4/15. */ -public class Common { - public static final String FRAGMENT_TAG = "permission_fragment_tag"; -} +object Common { + const val FRAGMENT_TAG = "permission_fragment_tag" +} \ No newline at end of file diff --git a/library/src/main/java/com/wangzhen/permission/fragment/PermissionFragment.kt b/library/src/main/java/com/wangzhen/permission/fragment/PermissionFragment.kt index f222871..35763df 100644 --- a/library/src/main/java/com/wangzhen/permission/fragment/PermissionFragment.kt +++ b/library/src/main/java/com/wangzhen/permission/fragment/PermissionFragment.kt @@ -1,102 +1,80 @@ -package com.wangzhen.permission.fragment; +package com.wangzhen.permission.fragment -import android.content.Context; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; - -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; -import androidx.lifecycle.Lifecycle; -import androidx.lifecycle.LifecycleEventObserver; -import androidx.lifecycle.LifecycleOwner; - -import com.wangzhen.permission.callback.PermissionCallback; -import com.wangzhen.permission.callback.PermissionOperate; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import android.content.pm.PackageInfo +import android.content.pm.PackageManager +import androidx.activity.result.contract.ActivityResultContracts +import androidx.fragment.app.Fragment +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver +import androidx.lifecycle.LifecycleOwner +import com.wangzhen.permission.callback.PermissionCallback +import com.wangzhen.permission.callback.PermissionOperate +import java.util.* /** * internal permission fragment * Created by wangzhen on 2020/4/15. */ -public class PermissionFragment extends Fragment implements PermissionOperate { - private static final List mGrantedPermissions = new ArrayList<>(); - private static final List mDeniedPermissions = new ArrayList<>(); - private static final List mNeverAskPermissions = new ArrayList<>(); - private static final List mNotDeclaredPermissions = new ArrayList<>(); +internal class PermissionFragment : Fragment(), PermissionOperate { + private var mCallback: PermissionCallback? = null - private Set mManifestPermissions; - private PermissionCallback mCallback; - - @Override - public void exeRequestPermissions(final String[] permissions, PermissionCallback callback) { - mGrantedPermissions.clear(); - mDeniedPermissions.clear(); - mNeverAskPermissions.clear(); - mNotDeclaredPermissions.clear(); - mCallback = callback; - if (getHost() != null) { - launcher.launch(permissions); + override fun exeRequestPermissions(permissions: Array, callback: PermissionCallback?) { + mGrantedPermissions.clear() + mDeniedPermissions.clear() + mNeverAskPermissions.clear() + mNotDeclaredPermissions.clear() + mCallback = callback + if (host != null) { + launcher.launch(permissions) } else { - getLifecycle().addObserver(new LifecycleEventObserver() { - @Override - public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) { + lifecycle.addObserver(object : LifecycleEventObserver { + override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) { if (event == Lifecycle.Event.ON_CREATE) { - getLifecycle().removeObserver(this); - launcher.launch(permissions); + lifecycle.removeObserver(this) + launcher.launch(permissions) } } - }); + }) } } - private final ActivityResultLauncher launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback>() { - @Override - public void onActivityResult(Map result) { - for (Map.Entry entry : result.entrySet()) { - String permission = entry.getKey(); - if (entry.getValue()) { - mGrantedPermissions.add(permission); + private val launcher = + registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { result -> + for ((permission, value) in result) { + if (value) { + mGrantedPermissions.add(permission) } else { if (containsManifest(permission)) { if (!shouldShowRequestPermissionRationale(permission)) { //permission never ask - mNeverAskPermissions.add(permission); + mNeverAskPermissions.add(permission) } else { //permission denied - mDeniedPermissions.add(permission); + mDeniedPermissions.add(permission) } } else { //permission not declared - mNotDeclaredPermissions.add(permission); + mNotDeclaredPermissions.add(permission) } } } - dispatch(); + dispatch() } - }); /** * dispatch permission callback */ - private void dispatch() { - if (mCallback == null) - return; + private fun dispatch() { if (mDeniedPermissions.isEmpty() && mNeverAskPermissions.isEmpty() && mNotDeclaredPermissions.isEmpty()) { - mCallback.onGrant(mGrantedPermissions.toArray(new String[0])); + mCallback?.onGrant(mGrantedPermissions.toTypedArray()) } else { - if (!mNotDeclaredPermissions.isEmpty()) { - mCallback.onNotDeclared(mNotDeclaredPermissions.toArray(new String[0])); + if (mNotDeclaredPermissions.isNotEmpty()) { + mCallback?.onNotDeclared(mNotDeclaredPermissions.toTypedArray()) } else { - mCallback.onDeny(mDeniedPermissions.toArray(new String[0]), mNeverAskPermissions.toArray(new String[0])); + mCallback?.onDeny( + mDeniedPermissions.toTypedArray(), + mNeverAskPermissions.toTypedArray() + ) } } } @@ -107,11 +85,8 @@ public class PermissionFragment extends Fragment implements PermissionOperate { * @param permission permission * @return result */ - private boolean containsManifest(String permission) { - if (mManifestPermissions == null) { - mManifestPermissions = getManifestPermissions(); - } - return mManifestPermissions.contains(permission); + private fun containsManifest(permission: String): Boolean { + return manifestPermissions().contains(permission) } /** @@ -119,25 +94,32 @@ public class PermissionFragment extends Fragment implements PermissionOperate { * * @return permissions set */ - private Set getManifestPermissions() { - Set manifestPermissions = null; - PackageInfo packageInfo = null; - Context context = getContext(); + private fun manifestPermissions(): Set { + var manifestPermissions: Set? = null + var packageInfo: PackageInfo? = null try { - if (context != null) { - context = context.getApplicationContext(); - packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS); + context?.let { ctx -> + packageInfo = ctx.applicationContext?.packageManager?.getPackageInfo( + ctx.packageName, + PackageManager.GET_PERMISSIONS + ) } - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); + } catch (e: PackageManager.NameNotFoundException) { + e.printStackTrace() } - if (packageInfo != null) { - String[] permissions = packageInfo.requestedPermissions; - if (permissions != null && permissions.length != 0) { - manifestPermissions = new HashSet<>(Arrays.asList(permissions)); + packageInfo?.let { info -> + val permissions = info.requestedPermissions + if (permissions != null && permissions.isNotEmpty()) { + manifestPermissions = HashSet(listOf(*permissions)) } } + return manifestPermissions ?: HashSet(0) + } - return manifestPermissions != null ? manifestPermissions : new HashSet(0); + companion object { + private val mGrantedPermissions: MutableList = ArrayList() + private val mDeniedPermissions: MutableList = ArrayList() + private val mNeverAskPermissions: MutableList = ArrayList() + private val mNotDeclaredPermissions: MutableList = ArrayList() } -} +} \ No newline at end of file diff --git a/library/src/main/java/com/wangzhen/permission/util/Utils.kt b/library/src/main/java/com/wangzhen/permission/util/Utils.kt index 33d7263..95da303 100644 --- a/library/src/main/java/com/wangzhen/permission/util/Utils.kt +++ b/library/src/main/java/com/wangzhen/permission/util/Utils.kt @@ -1,28 +1,29 @@ -package com.wangzhen.permission.util; +package com.wangzhen.permission.util -import android.content.Context; -import android.content.ContextWrapper; - -import androidx.fragment.app.FragmentActivity; +import android.content.Context +import android.content.ContextWrapper +import androidx.fragment.app.FragmentActivity /** * Utils * Created by wangzhen on 2020/4/15. */ -public class Utils { +object Utils { /** * find fragment activity by context * * @param context context * @return fragment activity */ - public static FragmentActivity getFragmentActivity(Context context) { - while (context instanceof ContextWrapper) { - if (context instanceof FragmentActivity) { - return (FragmentActivity) context; + @JvmStatic + fun getFragmentActivity(context: Context): FragmentActivity? { + var ctx = context + while (ctx is ContextWrapper) { + if (ctx is FragmentActivity) { + return ctx } - context = ((ContextWrapper) context).getBaseContext(); + ctx = ctx.baseContext } - return null; + return null } -} +} \ No newline at end of file