| /* |
| * Copyright (C) 2017 The Android Open Source Project |
| * |
| * 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 |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * 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.android.wallpaper.picker; |
| |
| import android.app.Activity; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.net.Uri; |
| import android.os.Bundle; |
| |
| import androidx.fragment.app.Fragment; |
| import androidx.fragment.app.FragmentManager; |
| |
| import com.android.wallpaper.R; |
| import com.android.wallpaper.config.BaseFlags; |
| import com.android.wallpaper.model.ImageWallpaperInfo; |
| import com.android.wallpaper.model.InlinePreviewIntentFactory; |
| import com.android.wallpaper.model.WallpaperInfo; |
| import com.android.wallpaper.module.InjectorProvider; |
| import com.android.wallpaper.module.LargeScreenMultiPanesChecker; |
| import com.android.wallpaper.picker.AppbarFragment.AppbarFragmentHost; |
| import com.android.wallpaper.picker.preview.ui.WallpaperPreviewActivity; |
| import com.android.wallpaper.util.ActivityUtils; |
| |
| /** |
| * Activity that displays a preview of a specific wallpaper and provides the ability to set the |
| * wallpaper as the user's current wallpaper. |
| */ |
| public class PreviewActivity extends BasePreviewActivity implements AppbarFragmentHost { |
| public static final int RESULT_MY_PHOTOS = 0; |
| |
| /** |
| * Returns a new Intent with the provided WallpaperInfo instance put as an extra. |
| */ |
| public static Intent newIntent(Context packageContext, WallpaperInfo wallpaperInfo, |
| boolean viewAsHome, boolean isAssetIdPresent) { |
| Intent intent = new Intent(packageContext, PreviewActivity.class); |
| intent.putExtra(EXTRA_WALLPAPER_INFO, wallpaperInfo); |
| intent.putExtra(IS_ASSET_ID_PRESENT, isAssetIdPresent); |
| intent.putExtra(EXTRA_VIEW_AS_HOME, viewAsHome); |
| return intent; |
| } |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| setContentView(R.layout.activity_preview); |
| |
| enableFullScreen(); |
| |
| FragmentManager fm = getSupportFragmentManager(); |
| Fragment fragment = fm.findFragmentById(R.id.fragment_container); |
| |
| if (fragment == null) { |
| Intent intent = getIntent(); |
| WallpaperInfo wallpaper = intent.getParcelableExtra(EXTRA_WALLPAPER_INFO); |
| boolean viewAsHome = intent.getBooleanExtra(EXTRA_VIEW_AS_HOME, false); |
| boolean isAssetIdPresent = intent.getBooleanExtra(IS_ASSET_ID_PRESENT, |
| false); |
| fragment = InjectorProvider.getInjector().getPreviewFragment( |
| /* context */ this, |
| wallpaper, |
| viewAsHome, |
| isAssetIdPresent, |
| /* isNewTask= */ false); |
| fm.beginTransaction() |
| .add(R.id.fragment_container, fragment) |
| .commit(); |
| } |
| } |
| |
| @Override |
| public void onUpArrowPressed() { |
| onBackPressed(); |
| } |
| |
| @Override |
| public boolean isUpArrowSupported() { |
| return !ActivityUtils.isSUWMode(getBaseContext()); |
| } |
| |
| @Override |
| protected void onActivityResult(int requestCode, int resultCode, Intent data) { |
| super.onActivityResult(requestCode, resultCode, data); |
| |
| if (requestCode == RESULT_MY_PHOTOS && resultCode == Activity.RESULT_OK) { |
| Uri imageUri = (data == null) ? null : data.getData(); |
| if (imageUri != null) { |
| ImageWallpaperInfo imageWallpaper = new ImageWallpaperInfo(imageUri); |
| FragmentManager fm = getSupportFragmentManager(); |
| Fragment fragment = InjectorProvider.getInjector().getPreviewFragment( |
| /* context= */ this, |
| imageWallpaper, |
| /* viewAsHome= */ true, |
| /* isAssetIdPresent= */ true, |
| /* isNewTask= */ false); |
| fm.beginTransaction() |
| .replace(R.id.fragment_container, fragment) |
| .commit(); |
| } |
| } |
| } |
| |
| /** |
| * Implementation that provides an intent to start a PreviewActivity. |
| * |
| * <p>Get singleton instance from [Injector] instead of creating new instance directly. |
| */ |
| public static class PreviewActivityIntentFactory implements InlinePreviewIntentFactory { |
| private boolean mIsViewAsHome = false; |
| |
| @Override |
| public Intent newIntent(Context context, WallpaperInfo wallpaper, |
| boolean isAssetIdPresent) { |
| Context appContext = context.getApplicationContext(); |
| final BaseFlags flags = InjectorProvider.getInjector().getFlags(); |
| LargeScreenMultiPanesChecker multiPanesChecker = new LargeScreenMultiPanesChecker(); |
| final boolean isMultiPanel = multiPanesChecker.isMultiPanesEnabled(appContext); |
| |
| if (flags.isMultiCropPreviewUiEnabled() && flags.isMultiCropEnabled()) { |
| return WallpaperPreviewActivity.Companion.newIntent(appContext, |
| wallpaper, isAssetIdPresent, mIsViewAsHome, /* isNewTask= */ isMultiPanel); |
| } |
| |
| // Launch a full preview activity for devices supporting multipanel mode |
| if (isMultiPanel) { |
| return FullPreviewActivity.newIntent(appContext, wallpaper, mIsViewAsHome, |
| isAssetIdPresent); |
| } |
| return PreviewActivity.newIntent(appContext, wallpaper, mIsViewAsHome, |
| isAssetIdPresent); |
| } |
| |
| @Override |
| public void setViewAsHome(boolean isViewAsHome) { |
| mIsViewAsHome = isViewAsHome; |
| } |
| } |
| } |