/* * 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.content.Context; import android.content.Intent; 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.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 view-only preview of a specific wallpaper. * *

TODO(b/298037335): Maybe reuse PreviewActivity and remove ViewOnlyPreviewActivity. */ public class ViewOnlyPreviewActivity extends BasePreviewActivity implements AppbarFragmentHost { /** * Returns a new Intent with the provided WallpaperInfo instance put as an extra. */ public static Intent newIntent(Context context, WallpaperInfo wallpaper) { return new Intent(context, ViewOnlyPreviewActivity.class) .putExtra(EXTRA_WALLPAPER_INFO, wallpaper); } /** * Returns a new Intent with extra to start this activity. * * @param isVewAsHome true to preview home screen, otherwise preview lock screen. */ public static Intent newIntent(Context context, WallpaperInfo wallpaper, boolean isVewAsHome, boolean isAssetIdPresent) { return newIntent(context, wallpaper).putExtra(EXTRA_VIEW_AS_HOME, isVewAsHome) .putExtra(IS_ASSET_ID_PRESENT, isAssetIdPresent); } @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, true); boolean isAssetIdPresent = intent.getBooleanExtra(IS_ASSET_ID_PRESENT, true); 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()); } /** * Implementation that provides an intent to start a PreviewActivity. * *

Get singleton instance from [Injector] instead of creating new instance directly. */ public static class ViewOnlyPreviewActivityIntentFactory implements InlinePreviewIntentFactory { private boolean mIsViewAsHome = false; @Override public Intent newIntent(Context context, WallpaperInfo wallpaper, boolean isAssetIdPresent) { Context appContext = context.getApplicationContext(); LargeScreenMultiPanesChecker multiPanesChecker = new LargeScreenMultiPanesChecker(); final boolean isMultiPanel = multiPanesChecker.isMultiPanesEnabled(appContext); final BaseFlags flags = InjectorProvider.getInjector().getFlags(); if (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 ViewOnlyPreviewActivity.newIntent(appContext, wallpaper, mIsViewAsHome, isAssetIdPresent); } @Override public void setViewAsHome(boolean isViewAsHome) { mIsViewAsHome = isViewAsHome; } } }