android: add requestPermissions API

This commit is contained in:
pengfei.zhou
2021-08-05 15:48:05 +08:00
committed by osborn
parent 9cb8df5372
commit 57cfdd38e1
9 changed files with 111 additions and 256 deletions

View File

@@ -18,6 +18,7 @@ package pub.doric;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
@@ -70,4 +71,13 @@ public class DoricActivity extends AppCompatActivity {
mDoricFragment.onActivityResult(requestCode, resultCode, data);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
int requestIndex = requestCode >> 16;
if (requestIndex == 0 && mDoricFragment != null) {
mDoricFragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}

View File

@@ -20,6 +20,7 @@ import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import com.github.pengfeizhou.jscore.JSDecoder;
@@ -310,4 +311,25 @@ public class DoricContext {
public void onEnvChanged() {
callEntity(DoricConstant.DORIC_ENTITY_ENV_CHANGE);
}
/**
* Use this to take effect of {@link #onRequestPermissionsResult(int, String[], int[])}
*/
public void requestPermissions(@NonNull String[] permissions, int requestCode) {
if (doricNavigator instanceof Fragment) {
((Fragment) doricNavigator).requestPermissions(permissions, requestCode);
}
}
/**
* To use this,
* you should use {@link #requestPermissions(String[], int)}.
*/
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
for (DoricJavaPlugin javaPlugin : mPluginMap.values()) {
if (javaPlugin != null) {
javaPlugin.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
}

View File

@@ -106,4 +106,15 @@ public class DoricFragment extends Fragment {
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
for (Fragment fragment : getChildFragmentManager().getFragments()) {
fragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
for (Fragment childFragment : fragment.getChildFragmentManager().getFragments()) {
childFragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
}

View File

@@ -131,6 +131,12 @@ public class DoricPanel extends FrameLayout implements LifecycleObserver {
}
}
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (mDoricContext != null) {
mDoricContext.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
public interface FrameChangedListener {
void onFrameChanged(int width, int height);
}

View File

@@ -231,4 +231,9 @@ public class DoricPanelFragment extends Fragment implements IDoricNavigator {
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
doricPanel.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
doricPanel.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}

View File

@@ -40,4 +40,11 @@ public abstract class DoricJavaPlugin extends DoricContextHolder {
public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
/**
* Called when use {@link DoricContext#requestPermissions(String[], int)}
*/
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
}
}