/**
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.tbruyelle.rxpermissions3;
import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Build;
import androidx.fragment.app.FragmentActivity;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentMatchers;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.android.controller.ActivityController;
import org.robolectric.annotation.Config;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.observers.TestObserver;
import io.reactivex.rxjava3.subjects.PublishSubject;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(RobolectricTestRunner.class)
@Config(sdk = Build.VERSION_CODES.M)
public class RxPermissionsTest {
private FragmentActivity mActivity;
private RxPermissions mRxPermissions;
@Before
public void setup() {
ActivityController<FragmentActivity> activityController = Robolectric.buildActivity(FragmentActivity.class);
mActivity = spy(activityController.setup().get());
mRxPermissions = spy(new RxPermissions(mActivity));
mRxPermissions.mRxPermissionsFragment = spy(mRxPermissions.mRxPermissionsFragment);
final RxPermissionsFragment rxPermissionsFragment = spy(mRxPermissions.mRxPermissionsFragment.get());
when(rxPermissionsFragment.getActivity()).thenReturn(mActivity);
when(mRxPermissions.mRxPermissionsFragment.get()).thenReturn(rxPermissionsFragment);
// Default deny all permissions
doReturn(false).when(mRxPermissions).isGranted(anyString());
// Default no revoked permissions
doReturn(false).when(mRxPermissions).isRevoked(anyString());
}
private Observable<Object> trigger() {
return Observable.just(RxPermissions.TRIGGER);
}
@Test
@TargetApi(Build.VERSION_CODES.M)
public void subscription_preM() {
TestObserver<Boolean> sub = new TestObserver<>();
String permission = Manifest.permission.READ_PHONE_STATE;
when(mRxPermissions.isGranted(permission)).thenReturn(true);
trigger().compose(mRxPermissions.ensure(permission)).subscribe(sub);
sub.assertNoErrors();
sub.assertValue(true);
}
@Test
@TargetApi(Build.VERSION_CODES.M)
public void subscription_granted() {
TestObserver<Boolean> sub = new TestObserver<>();
String permission = Manifest.permission.READ_PHONE_STATE;
when(mRxPermissions.isGranted(permission)).thenReturn(false);
int[] result = new int[]{PackageManager.PERMISSION_GRANTED};
trigger().compose(mRxPermissions.ensure(permission)).subscribe(sub);
mRxPermissions.onRequestPermissionsResult(new String[]{permission}, result);
sub.assertNoErrors();
sub.assertValue(true);
}
@Test
@TargetApi(Build.VERSION_CODES.M)
public void eachSubscription_granted() {
TestObserver<Permission> sub = new TestObserver<>();
String permission = Manifest.permission.READ_PHONE_STATE;
when(mRxPermissions.isGranted(permission)).thenReturn(false);
int[] result = new int[]{PackageManager.PERMISSION_GRANTED};
trigger().compose(mRxPermissions.ensureEach(permission)).subscribe(sub);
mRxPermissions.onRequestPermissionsResult(new String[]{permission}, result);
sub.assertNoErrors();
sub.assertValue(new Permission(permission, true));
}
@Test
@TargetApi(Build.VERSION_CODES.M)
public void eachSubscriptionCombined_granted() {
TestObserver<Permission> sub = new TestObserver<>();
String permission = Manifest.permission.READ_PHONE_STATE;
when(mRxPermissions.isGranted(permission)).thenReturn(false);
int[] result = new int[]{PackageManager.PERMISSION_GRANTED};
trigger().compose(mRxPermissions.ensureEachCombined(permission)).subscribe(sub);
mRxPermissions.onRequestPermissionsResult(new String[]{permission}, result);
sub.assertNoErrors();
sub.assertValue(new Permission(permission, true));
}
@Test
@TargetApi(Build.VERSION_CODES.M)
public void eachSubscription_preM() {
TestObserver<Permission> sub = new TestObserver<>();
String permission = Manifest.permission.READ_PHONE_STATE;
when(mRxPermissions.isGranted(permission)).thenReturn(true);
trigger().compose(mRxPermissions.ensureEach(permission)).subscribe(sub);
sub.assertNoErrors();
sub.assertValue(new Permission(permission, true));
}
@Test
@TargetApi(Build.VERSION_CODES.M)
public void eachSubscriptionCombined_preM() {
TestObserver<Permission> sub = new TestObserver<>();
String permission = Manifest.permission.READ_PHONE_STATE;
when(mRxPermissions.isGranted(permission)).thenReturn(true);
trigger().compose(mRxPermissions.ensureEachCombined(permission)).subscribe(sub);
sub.assertNoErrors();
sub.assertValue(new Permission(permission, true));
}
@Test
@TargetApi(Build.VERSION_CODES.M)
public void subscription_alreadyGranted() {
TestObserver<Boolean> sub = new TestObserver<>();
String permission = Manifest.permission.READ_PHONE_STATE;
when(mRxPermissions.isGranted(permission)).thenReturn(true);
trigger().compose(mRxPermissions.ensure(permission)).subscribe(sub);
sub.assertNoErrors();
sub.assertValue(true);
}
@Test
@TargetApi(Build.VERSION_CODES.M)
public void subscription_denied() {
TestObserver<Boolean> sub = new TestObserver<>();
String permission = Manifest.permission.READ_PHONE_STATE;
when(mRxPermissions.isGranted(permission)).thenReturn(false);
int[] result = new int[]{PackageManager.PERMISSION_DENIED};
trigger().compose(mRxPermissions.ensure(permission)).subscribe(sub);
mRxPermissions.onRequestPermissionsResult(new String[]{permission}, result);
sub.assertNoErrors();
sub.assertValue(false);
}
@Test
@TargetApi(Build.VERSION_CODES.M)
public void eachSubscription_denied() {
TestObserver<Permission> sub = new TestObserver<>();
String permission = Manifest.permission.READ_PHONE_STATE;
when(mRxPermissions.isGranted(permission)).thenReturn(false);
int[] result = new int[]{PackageManager.PERMISSION_DENIED};
trigger().compose(mRxPermissions.ensureEach(permission)).subscribe(sub);
mRxPermissions.onRequestPermissionsResult(new String[]{permission}, result);
sub.assertNoErrors();
sub.assertValue(new Permission(permission, false));
}
@Test
@TargetApi(Build.VERSION_CODES.M)
public void eachSubscriptionCombined_denied() {
TestObserver<Permission> sub = new TestObserver<>();
String permission = Manif
没有合适的资源?快使用搜索试试~ 我知道了~
Android开发录音和拍照功能
共207个文件
xml:142个
java:12个
png:11个
5星 · 超过95%的资源 需积分: 2 18 下载量 111 浏览量
2022-10-06
17:28:44
上传
评论 3
收藏 594KB RAR 举报
温馨提示
Android开发录音和拍照功能demo,实现长按录音,放起结束录音,拍照可调用前置摄像头后置摄像头切换
资源详情
资源评论
资源推荐
收起资源包目录
Android开发录音和拍照功能 (207个子文件)
gradlew.bat 2KB
executionHistory.bin 1.84MB
classAnalysis.bin 1.43MB
jarAnalysis.bin 517KB
outputFiles.bin 95KB
fileHashes.bin 72KB
taskHistory.bin 60KB
resourceHashesCache.bin 19KB
sha1-checksums.bin 18KB
md5-checksums.bin 18KB
last-build.bin 1B
.gitignore 240B
.gitignore 50B
.gitignore 6B
build.gradle 1KB
build.gradle 1KB
bintray.gradle 1KB
install.gradle 972B
build.gradle 553B
jitpack.gradle 82B
settings.gradle 74B
gradlew 5KB
My_Application.rxpmslib.iml 14KB
My_Application.app.iml 11KB
My_Application.iml 1KB
gradle-wrapper.jar 53KB
RxPermissionsTest.java 26KB
MainActivity.java 14KB
DocumentsUtils.java 13KB
RxPermissions.java 13KB
LuyingActivity.java 12KB
LgqLogPlus.java 6KB
RxPermissionsFragment.java 4KB
Permission.java 4KB
StorageDataUtils.java 2KB
WavMergeUtil.java 2KB
ExampleInstrumentedTest.java 789B
ExampleUnitTest.java 402B
checksums.lock 17B
buildOutputCleanup.lock 17B
fileContent.lock 17B
javaCompile.lock 17B
executionHistory.lock 17B
fileHashes.lock 17B
.name 14B
ic_launcher_round.png 16KB
ic_launcher_round.png 12KB
recod_start_f01.png 12KB
ic_launcher.png 10KB
ic_launcher.png 8KB
ic_launcher_round.png 7KB
ic_launcher_round.png 5KB
ic_launcher.png 5KB
ic_launcher.png 4KB
ic_launcher_round.png 3KB
ic_launcher.png 3KB
proguard-rules.pro 770B
proguard-rules.pro 641B
gradle.properties 804B
local.properties 419B
gradle-wrapper.properties 236B
cache.properties 51B
gc.properties 0B
gc.properties 0B
build_file_checksums.ser 545B
workspace.xml 8KB
ic_launcher_background.xml 6KB
ic_launcher_foreground.xml 2KB
AndroidManifest.xml 2KB
Gradle__androidx_test_espresso_espresso_idling_resource_3_2_0_aar.xml 1KB
jarRepositories.xml 1KB
activity_main.xml 1KB
Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml 1KB
Gradle__com_jakewharton_rxbinding4_rxbinding_4_0_0_aar.xml 1KB
Gradle__androidx_test_espresso_espresso_core_3_2_0_aar.xml 1KB
Gradle__com_google_android_apps_common_testing_accessibility_framework_accessibility_test_framework_2_1.xml 1KB
Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml 1KB
Gradle__io_reactivex_rxjava3_rxandroid_3_0_0_aar.xml 1KB
Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml 1023B
Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml 1023B
Gradle__com_google_android_material_material_1_1_0_aar.xml 1007B
Gradle__androidx_transition_transition_1_2_0_aar.xml 1005B
Gradle__androidx_test_ext_junit_1_1_1_aar.xml 999B
Gradle__androidx_appcompat_appcompat_1_1_0_aar.xml 996B
Gradle__androidx_fragment_fragment_1_1_0_aar.xml 987B
Gradle__androidx_fragment_fragment_1_2_5_aar.xml 987B
Gradle__androidx_test_core_1_2_0_aar.xml 979B
Gradle__androidx_test_monitor_1_2_0_aar.xml 976B
Gradle__androidx_test_runner_1_2_0_aar.xml 968B
Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_2_0_aar.xml 965B
Gradle__org_codehaus_plexus_plexus_container_default_1_0_alpha_9_stable_1.xml 964B
Gradle__androidx_core_core_1_1_0_aar.xml 951B
Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml 906B
Gradle__org_robolectric_plugins_maven_dependency_resolver_4_3_1.xml 906B
Gradle__androidx_appcompat_appcompat_resources_1_1_0_aar.xml 899B
Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml 896B
Gradle__androidx_lifecycle_lifecycle_livedata_core_2_2_0_aar.xml 896B
Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml 892B
Gradle__org_apache_maven_wagon_wagon_http_lightweight_1_0_beta_6.xml 891B
Gradle__androidx_lifecycle_lifecycle_viewmodel_2_1_0_aar.xml 872B
共 207 条
- 1
- 2
- 3
meixi_android
- 粉丝: 290
- 资源: 105
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论10