Refactor view to remove references to Presenter
Bug: 291651937
Test: atest CarLauncherTests
Change-Id: I75be460e83a3a944a6638116630071f13ad7b52f
diff --git a/res/values/config.xml b/res/values/config.xml
index ab174f3..ff42c66 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -18,8 +18,8 @@
<resources>
<!-- A list of package names that provide the cards to display on the home screen -->
<string-array name="config_homeCardModuleClasses" translatable="false">
- <item>com.android.car.carlauncher.homescreen.assistive.AssistiveCard</item>
- <item>com.android.car.carlauncher.homescreen.audio.AudioCard</item>
+ <item>com.android.car.carlauncher.homescreen.assistive.AssistiveCardModule</item>
+ <item>com.android.car.carlauncher.homescreen.audio.AudioCardModule</item>
</string-array>
<!--
diff --git a/src/com/android/car/carlauncher/homescreen/HomeCardFragment.java b/src/com/android/car/carlauncher/homescreen/HomeCardFragment.java
index 6d6c113..72408c4 100644
--- a/src/com/android/car/carlauncher/homescreen/HomeCardFragment.java
+++ b/src/com/android/car/carlauncher/homescreen/HomeCardFragment.java
@@ -58,7 +58,6 @@
*/
public class HomeCardFragment extends Fragment implements HomeCardInterface.View {
- private HomeCardInterface.Presenter mPresenter;
private Size mSize;
private View mCardBackground;
private CrossfadeImageView mCardBackgroundImage;
@@ -95,6 +94,10 @@
private boolean mTrackingTouch;
private PlaybackCallback mPlaybackCallback;
+
+ private OnViewLifecycleChangeListener mOnViewLifecycleChangeListener;
+
+ private OnViewClickListener mOnViewClickListener;
private SeekBar.OnSeekBarChangeListener mOnSeekBarChangeListener =
new SeekBar.OnSeekBarChangeListener() {
@Override
@@ -115,9 +118,31 @@
}
};
- @Override
- public void setPresenter(HomeCardInterface.Presenter presenter) {
- mPresenter = presenter;
+ /**
+ * Interface definition for a callback to be invoked for a view lifecycle changes.
+ */
+ public interface OnViewLifecycleChangeListener {
+
+ /**
+ * Called when a view has been Created.
+ */
+ void onViewCreated();
+
+ /**
+ * Called when a view has been destroyed.
+ */
+ void onViewDestroyed();
+ }
+
+ /**
+ * Interface definition for a callback to be invoked when a view is clicked.
+ */
+ public interface OnViewClickListener {
+
+ /**
+ * Called when a view has been clicked.
+ */
+ void onViewClicked();
}
@Override
@@ -132,16 +157,14 @@
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- mPresenter.onViewCreated();
- mRootView.setOnClickListener(v -> mPresenter.onViewClicked(v));
+ mOnViewLifecycleChangeListener.onViewCreated();
+ mRootView.setOnClickListener(v -> mOnViewClickListener.onViewClicked());
}
@Override
public void onDestroy() {
super.onDestroy();
- if (mPresenter != null) {
- mPresenter.onViewDestroyed();
- }
+ mOnViewLifecycleChangeListener.onViewDestroyed();
mSize = null;
}
@@ -151,6 +174,25 @@
}
/**
+ * Register a callback to be invoked when this view lifecycle changes.
+ *
+ * @param onViewLifecycleChangeListener The callback that will run
+ */
+ public void setOnViewLifecycleChangeListener(
+ OnViewLifecycleChangeListener onViewLifecycleChangeListener) {
+ mOnViewLifecycleChangeListener = onViewLifecycleChangeListener;
+ }
+
+ /**
+ * Register a callback to be invoked when this view is clicked.
+ *
+ * @param onViewClickListener The callback that will run
+ */
+ public void setOnViewClickListener(OnViewClickListener onViewClickListener) {
+ mOnViewClickListener = onViewClickListener;
+ }
+
+ /**
* Returns the size of the card or null if the view hasn't yet been laid out
*/
protected Size getCardSize() {
diff --git a/src/com/android/car/carlauncher/homescreen/HomeCardInterface.java b/src/com/android/car/carlauncher/homescreen/HomeCardInterface.java
index 06d8322..e32dd8b 100644
--- a/src/com/android/car/carlauncher/homescreen/HomeCardInterface.java
+++ b/src/com/android/car/carlauncher/homescreen/HomeCardInterface.java
@@ -46,11 +46,6 @@
interface View {
/**
- * Sets the {@link Presenter} that will manage this View.
- */
- void setPresenter(Presenter presenter);
-
- /**
* Called by the Presenter to remove the entire card from view if there is no data to
* display.
*/
@@ -97,23 +92,6 @@
void setModels(List<Model> models);
/**
- * Called by the View when its view has been created.
- * This signals the presenter to initialize the relevant models it will use as data sources
- * and start listening for updates.
- */
- void onViewCreated();
-
- /**
- * Called by the View when it is destroyed to allow the presenter to clean up any models
- */
- void onViewDestroyed();
-
- /**
- * Called by the View when it is clicked
- */
- default void onViewClicked(android.view.View v) {}
-
- /**
* Called by one of the Presenter's models when it has updated information to display on
* the card.
*/
diff --git a/src/com/android/car/carlauncher/homescreen/assistive/AssistiveCard.java b/src/com/android/car/carlauncher/homescreen/assistive/AssistiveCardModule.java
similarity index 94%
rename from src/com/android/car/carlauncher/homescreen/assistive/AssistiveCard.java
rename to src/com/android/car/carlauncher/homescreen/assistive/AssistiveCardModule.java
index 1aa98ee..4243cfa 100644
--- a/src/com/android/car/carlauncher/homescreen/assistive/AssistiveCard.java
+++ b/src/com/android/car/carlauncher/homescreen/assistive/AssistiveCardModule.java
@@ -30,7 +30,7 @@
* Home screen card that displays general assistive content including projection status and
* static weather data.
*/
-public class AssistiveCard implements HomeCardModule {
+public class AssistiveCardModule implements HomeCardModule {
private ViewModelProvider mViewModelProvider;
private AssistiveCardPresenter mAssistiveCardPresenter;
@@ -62,7 +62,6 @@
if (mAssistiveCardView == null) {
mAssistiveCardView = new HomeCardFragment();
getCardPresenter().setView(mAssistiveCardView);
- mAssistiveCardView.setPresenter(getCardPresenter());
}
return mAssistiveCardView;
}
diff --git a/src/com/android/car/carlauncher/homescreen/assistive/AssistiveCardPresenter.java b/src/com/android/car/carlauncher/homescreen/assistive/AssistiveCardPresenter.java
index 2d27c8c..8027b62 100644
--- a/src/com/android/car/carlauncher/homescreen/assistive/AssistiveCardPresenter.java
+++ b/src/com/android/car/carlauncher/homescreen/assistive/AssistiveCardPresenter.java
@@ -16,9 +16,13 @@
package com.android.car.carlauncher.homescreen.assistive;
-import android.view.View;
+import android.content.Intent;
+import android.util.Log;
+import android.widget.Toast;
+import com.android.car.carlauncher.R;
import com.android.car.carlauncher.homescreen.CardPresenter;
+import com.android.car.carlauncher.homescreen.HomeCardFragment;
import com.android.car.carlauncher.homescreen.HomeCardInterface;
import java.util.List;
@@ -28,43 +32,66 @@
*/
public class AssistiveCardPresenter extends CardPresenter {
+ private static final String TAG = "AssistiveCardPresenter";
+ private HomeCardFragment mHomeCardFragment;
+
private AssistiveModel mCurrentModel;
private List<HomeCardInterface.Model> mModels;
+ private HomeCardFragment.OnViewClickListener mOnViewClickListener =
+ new HomeCardFragment.OnViewClickListener() {
+ @Override
+ public void onViewClicked() {
+ Intent intent = mCurrentModel.getIntent();
+ if (intent != null && intent.resolveActivity(
+ mHomeCardFragment.getContext().getPackageManager()) != null) {
+ mHomeCardFragment.getContext().startActivity(intent);
+ } else {
+ Log.e(TAG, "No activity component found to handle intent with action: "
+ + intent.getAction());
+ Toast.makeText(mHomeCardFragment.getContext(),
+ mHomeCardFragment.getContext().getResources().getString(
+ R.string.projected_onclick_launch_error_toast_text),
+ Toast.LENGTH_SHORT).show();
+ }
+ }
+ };
+
+ private HomeCardFragment.OnViewLifecycleChangeListener mOnViewLifecycleChangeListener =
+ new HomeCardFragment.OnViewLifecycleChangeListener() {
+ @Override
+ public void onViewCreated() {
+ for (HomeCardInterface.Model model : mModels) {
+ setPresenterInModel(model);
+ model.onCreate(getFragment().requireContext());
+ }
+ }
+
+ @Override
+ public void onViewDestroyed() {
+ if (mModels != null) {
+ for (HomeCardInterface.Model model : mModels) {
+ model.onDestroy(getFragment().requireContext());
+ }
+ }
+ }
+ };
+
+ @Override
+ public void setView(HomeCardInterface.View view) {
+ super.setView(view);
+ mHomeCardFragment = (HomeCardFragment) view;
+ mHomeCardFragment.setOnViewClickListener(mOnViewClickListener);
+ mHomeCardFragment.setOnViewLifecycleChangeListener(mOnViewLifecycleChangeListener);
+ }
+
@Override
public void setModels(List<HomeCardInterface.Model> models) {
mModels = models;
}
- /**
- * Called when the View is created
- */
- @Override
- public void onViewCreated() {
- for (HomeCardInterface.Model model : mModels) {
- model.setPresenter(this);
- model.onCreate(getFragment().requireContext());
- }
- }
-
- /**
- * Called when the View is destroyed
- */
- @Override
- public void onViewDestroyed() {
- if (mModels != null) {
- for (HomeCardInterface.Model model : mModels) {
- model.onDestroy(getFragment().requireContext());
- }
- }
- }
-
- /**
- * Called when the View is clicked
- */
- @Override
- public void onViewClicked(View v) {
- mCurrentModel.onClick(v);
+ private void setPresenterInModel(HomeCardInterface.Model model) {
+ model.setPresenter(this);
}
/**
diff --git a/src/com/android/car/carlauncher/homescreen/assistive/AssistiveModel.java b/src/com/android/car/carlauncher/homescreen/assistive/AssistiveModel.java
index 1c9c219..7d3e886 100644
--- a/src/com/android/car/carlauncher/homescreen/assistive/AssistiveModel.java
+++ b/src/com/android/car/carlauncher/homescreen/assistive/AssistiveModel.java
@@ -16,6 +16,8 @@
package com.android.car.carlauncher.homescreen.assistive;
+import android.content.Intent;
+
import com.android.car.carlauncher.homescreen.HomeCardInterface;
/**
@@ -23,7 +25,9 @@
*/
public interface AssistiveModel extends HomeCardInterface.Model {
/**
- * Called by the Presenter to handle when the View is clicked
+ * Called by the Presenter to getIntent when the View is clicked
*/
- default void onClick(android.view.View view) {}
+ default Intent getIntent() {
+ return null;
+ }
}
diff --git a/src/com/android/car/carlauncher/homescreen/assistive/ProjectionModel.java b/src/com/android/car/carlauncher/homescreen/assistive/ProjectionModel.java
index 7e3d6d7..aa925d3 100644
--- a/src/com/android/car/carlauncher/homescreen/assistive/ProjectionModel.java
+++ b/src/com/android/car/carlauncher/homescreen/assistive/ProjectionModel.java
@@ -27,8 +27,6 @@
import android.graphics.drawable.Drawable;
import android.icu.text.MessageFormat;
import android.util.Log;
-import android.view.View;
-import android.widget.Toast;
import androidx.annotation.Nullable;
@@ -113,16 +111,8 @@
}
@Override
- public void onClick(View v) {
- if (mIntent.resolveActivity(v.getContext().getPackageManager()) != null) {
- v.getContext().startActivity(mIntent);
- } else {
- Log.e(TAG, "No activity component found to handle intent with action: "
- + mIntent.getAction());
- Toast.makeText(v.getContext(),
- mResources.getString(R.string.projected_onclick_launch_error_toast_text),
- Toast.LENGTH_SHORT).show();
- }
+ public Intent getIntent() {
+ return mIntent;
}
@Override
diff --git a/src/com/android/car/carlauncher/homescreen/audio/AudioCard.java b/src/com/android/car/carlauncher/homescreen/audio/AudioCardModule.java
similarity index 95%
rename from src/com/android/car/carlauncher/homescreen/audio/AudioCard.java
rename to src/com/android/car/carlauncher/homescreen/audio/AudioCardModule.java
index 083f5b0..6ffb692 100644
--- a/src/com/android/car/carlauncher/homescreen/audio/AudioCard.java
+++ b/src/com/android/car/carlauncher/homescreen/audio/AudioCardModule.java
@@ -32,7 +32,7 @@
/**
* Home screen card that displays audio related content
*/
-public class AudioCard implements HomeCardModule {
+public class AudioCardModule implements HomeCardModule {
private static final String TAG = "HomeScreenAudioCard";
@@ -77,7 +77,6 @@
if (mAudioCardView == null) {
mAudioCardView = new AudioFragment();
getCardPresenter().setView(mAudioCardView);
- mAudioCardView.setPresenter(getCardPresenter());
}
return mAudioCardView;
}
diff --git a/src/com/android/car/carlauncher/homescreen/audio/AudioFragment.java b/src/com/android/car/carlauncher/homescreen/audio/AudioFragment.java
index 8124457..3b94b72 100644
--- a/src/com/android/car/carlauncher/homescreen/audio/AudioFragment.java
+++ b/src/com/android/car/carlauncher/homescreen/audio/AudioFragment.java
@@ -29,9 +29,9 @@
import com.android.car.apps.common.ImageUtils;
import com.android.car.carlauncher.R;
import com.android.car.carlauncher.homescreen.HomeCardFragment;
-import com.android.car.carlauncher.homescreen.HomeCardInterface;
import com.android.car.carlauncher.homescreen.ui.CardContent;
import com.android.car.carlauncher.homescreen.ui.DescriptiveTextWithControlsView;
+import com.android.car.media.common.PlaybackControlsActionBar;
/**
@@ -40,7 +40,17 @@
*/
public class AudioFragment extends HomeCardFragment {
- private AudioPresenter mPresenter;
+ /**
+ * Interface definition for a callback to be invoked when a media layout is inflated.
+ */
+ public interface OnMediaViewInitializedListener {
+
+ /**
+ * Called when a media layout is inflated.
+ */
+ void onMediaViewInitialized();
+ }
+
private Chronometer mChronometer;
private View mChronometerSeparator;
private float mBlurRadius;
@@ -48,16 +58,13 @@
// Views from card_content_media.xml, which is used only for the media card
private View mMediaLayoutView;
+ private View mMediaControlBarView;
private TextView mMediaTitle;
private TextView mMediaSubtitle;
private boolean mShowSeekBar;
- @Override
- public void setPresenter(HomeCardInterface.Presenter presenter) {
- super.setPresenter(presenter);
- mPresenter = (AudioPresenter) presenter;
- }
+ private OnMediaViewInitializedListener mOnMediaViewInitializedListener;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -113,13 +120,17 @@
mMediaLayoutView = stub.inflate();
mMediaTitle = mMediaLayoutView.findViewById(R.id.primary_text);
mMediaSubtitle = mMediaLayoutView.findViewById(R.id.secondary_text);
- View mediaControlBarView = mMediaLayoutView.findViewById(
+ mMediaControlBarView = mMediaLayoutView.findViewById(
R.id.media_playback_controls_bar);
- mPresenter.initializeControlsActionBar(mediaControlBarView);
+ mOnMediaViewInitializedListener.onMediaViewInitialized();
}
return mMediaLayoutView;
}
+ public PlaybackControlsActionBar getPlaybackControlsActionBar() {
+ return (PlaybackControlsActionBar) mMediaControlBarView;
+ }
+
private void updateBackgroundImage(CardContent.CardBackgroundImage cardBackgroundImage) {
if (getCardSize() != null) {
if (cardBackgroundImage.getForeground() == null) {
@@ -168,4 +179,9 @@
mChronometerSeparator.setVisibility(View.GONE);
}
}
+
+ public void setOnMediaViewInitializedListener(
+ OnMediaViewInitializedListener onMediaViewInitializedListener) {
+ mOnMediaViewInitializedListener = onMediaViewInitializedListener;
+ }
}
diff --git a/src/com/android/car/carlauncher/homescreen/audio/AudioModel.java b/src/com/android/car/carlauncher/homescreen/audio/AudioModel.java
index 2548ea2..db70005 100644
--- a/src/com/android/car/carlauncher/homescreen/audio/AudioModel.java
+++ b/src/com/android/car/carlauncher/homescreen/audio/AudioModel.java
@@ -16,6 +16,8 @@
package com.android.car.carlauncher.homescreen.audio;
+import android.content.Intent;
+
import com.android.car.carlauncher.homescreen.HomeCardInterface;
/**
@@ -23,7 +25,7 @@
*/
public interface AudioModel extends HomeCardInterface.Model {
/**
- * Called by the Presenter to handle when the View is clicked
+ * Called by the Presenter to getIntent when the View is clicked
*/
- default void onClick(android.view.View view) {}
+ Intent getIntent();
}
diff --git a/src/com/android/car/carlauncher/homescreen/audio/AudioPresenter.java b/src/com/android/car/carlauncher/homescreen/audio/AudioPresenter.java
deleted file mode 100644
index c185a2d..0000000
--- a/src/com/android/car/carlauncher/homescreen/audio/AudioPresenter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2023 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.car.carlauncher.homescreen.audio;
-
-import android.view.View;
-
-import com.android.car.carlauncher.homescreen.HomeCardInterface;
-
-/**
- * An extension of {@link HomeCardInterface.Presenter} used to initialize controls action bar.
- */
-public interface AudioPresenter extends HomeCardInterface.Presenter {
- /**
- * Initialize action bar by setting its playback view model & lifecycle owner.
- */
- void initializeControlsActionBar(View actionBar);
-}
diff --git a/src/com/android/car/carlauncher/homescreen/audio/HomeAudioCardPresenter.java b/src/com/android/car/carlauncher/homescreen/audio/HomeAudioCardPresenter.java
index ac52a95..8557aae 100644
--- a/src/com/android/car/carlauncher/homescreen/audio/HomeAudioCardPresenter.java
+++ b/src/com/android/car/carlauncher/homescreen/audio/HomeAudioCardPresenter.java
@@ -16,11 +16,13 @@
package com.android.car.carlauncher.homescreen.audio;
-import android.view.View;
+import android.app.ActivityOptions;
+import android.content.Intent;
+import android.view.Display;
import com.android.car.carlauncher.homescreen.CardPresenter;
+import com.android.car.carlauncher.homescreen.HomeCardFragment;
import com.android.car.carlauncher.homescreen.HomeCardInterface;
-import com.android.car.media.common.PlaybackControlsActionBar;
import java.util.List;
@@ -30,12 +32,70 @@
* For the audio card, the {@link AudioFragment} implements the View and displays information on
* media from a {@link MediaViewModel}.
*/
-public class HomeAudioCardPresenter extends CardPresenter implements AudioPresenter {
+public class HomeAudioCardPresenter extends CardPresenter {
+
+ private AudioFragment mAudioFragment;
private AudioModel mCurrentModel;
private List<HomeCardInterface.Model> mModelList;
private MediaViewModel mMediaViewModel;
+ private HomeCardFragment.OnViewClickListener mOnViewClickListener =
+ new HomeCardFragment.OnViewClickListener() {
+ @Override
+ public void onViewClicked() {
+ Intent intent = mCurrentModel.getIntent();
+ if (intent != null) {
+ ActivityOptions options = ActivityOptions.makeBasic();
+ options.setLaunchDisplayId(Display.DEFAULT_DISPLAY);
+ mAudioFragment.getContext().startActivity(intent, options.toBundle());
+ }
+ }
+ };
+
+ private HomeCardFragment.OnViewLifecycleChangeListener mOnViewLifecycleChangeListener =
+ new HomeCardFragment.OnViewLifecycleChangeListener() {
+ @Override
+ public void onViewCreated() {
+ for (HomeCardInterface.Model model : mModelList) {
+ if (model.getClass() == MediaViewModel.class) {
+ mMediaViewModel = (MediaViewModel) model;
+ }
+ model.setPresenter(HomeAudioCardPresenter.this);
+ model.onCreate(getFragment().requireContext());
+ }
+ }
+
+ @Override
+ public void onViewDestroyed() {
+ if (mModelList != null) {
+ for (HomeCardInterface.Model model : mModelList) {
+ model.onDestroy(getFragment().requireContext());
+ }
+ }
+ }
+ };
+
+ private AudioFragment.OnMediaViewInitializedListener mOnMediaViewInitializedListener =
+ new AudioFragment.OnMediaViewInitializedListener() {
+ @Override
+ public void onMediaViewInitialized() {
+ // set playbackviewmodel on playback control actions view
+ mAudioFragment.getPlaybackControlsActionBar().setModel(
+ mMediaViewModel.getPlaybackViewModel(),
+ mAudioFragment.getViewLifecycleOwner());
+ }
+ };
+
+ @Override
+ public void setView(HomeCardInterface.View view) {
+ super.setView(view);
+ mAudioFragment = (AudioFragment) view;
+ mAudioFragment.setOnViewLifecycleChangeListener(mOnViewLifecycleChangeListener);
+ mAudioFragment.setOnViewClickListener(mOnViewClickListener);
+ mAudioFragment.setOnMediaViewInitializedListener(mOnMediaViewInitializedListener);
+ }
+
@Override
public void setModels(List<HomeCardInterface.Model> models) {
mModelList = models;
@@ -50,40 +110,6 @@
}
/**
- * Called when the View is created
- */
- @Override
- public void onViewCreated() {
- for (HomeCardInterface.Model model : mModelList) {
- if (model.getClass() == MediaViewModel.class) {
- mMediaViewModel = (MediaViewModel) model;
- }
- model.setPresenter(this);
- model.onCreate(getFragment().requireContext());
- }
- }
-
- /**
- * Called when the View is destroyed
- */
- @Override
- public void onViewDestroyed() {
- if (mModelList != null) {
- for (HomeCardInterface.Model model : mModelList) {
- model.onDestroy(getFragment().requireContext());
- }
- }
- }
-
- /**
- * Called when the View is clicked
- */
- @Override
- public void onViewClicked(View v) {
- mCurrentModel.onClick(v);
- }
-
- /**
* Updates the View appropriately when a Model has new content.
*
* If the updated model has content, it is displayed, regardless of what is currently shown on
@@ -119,10 +145,4 @@
mCurrentModel = (AudioModel) model;
super.onModelUpdated(model);
}
-
- @Override
- public void initializeControlsActionBar(View actionBar) {
- ((PlaybackControlsActionBar) actionBar).setModel(mMediaViewModel.getPlaybackViewModel(),
- getFragment().getViewLifecycleOwner());
- }
}
diff --git a/src/com/android/car/carlauncher/homescreen/audio/InCallModel.java b/src/com/android/car/carlauncher/homescreen/audio/InCallModel.java
index 143e9f8..01aef08 100644
--- a/src/com/android/car/carlauncher/homescreen/audio/InCallModel.java
+++ b/src/com/android/car/carlauncher/homescreen/audio/InCallModel.java
@@ -175,7 +175,7 @@
* display as one of the requirements to fill this role is to provide an ongoing call UI.
*/
@Override
- public void onClick(View view) {
+ public Intent getIntent() {
Intent intent = null;
if (isSelfManagedCall() && mSelfManagedCallUtil.canShowCalInCallView()) {
Bundle extras = mCurrentCall.getDetails().getExtras();
@@ -194,7 +194,16 @@
intent = mPackageManager.getLaunchIntentForPackage(
mTelecomManager.getDefaultDialerPackage());
}
+ return intent;
+ }
+ /**
+ * Clicking the card opens the default dialer application that fills the role of {@link
+ * android.app.role.RoleManager#ROLE_DIALER}. This application will have an appropriate UI to
+ * display as one of the requirements to fill this role is to provide an ongoing call UI.
+ */
+ public void onClick(View view) {
+ Intent intent = getIntent();
if (intent != null) {
// Launch activity in the default app task container: the display area where
// applications are launched by default.
diff --git a/src/com/android/car/carlauncher/homescreen/audio/MediaViewModel.java b/src/com/android/car/carlauncher/homescreen/audio/MediaViewModel.java
index 47b0adc..803aadf 100644
--- a/src/com/android/car/carlauncher/homescreen/audio/MediaViewModel.java
+++ b/src/com/android/car/carlauncher/homescreen/audio/MediaViewModel.java
@@ -19,7 +19,6 @@
import static android.car.media.CarMediaIntents.EXTRA_MEDIA_COMPONENT;
import static android.car.media.CarMediaManager.MEDIA_SOURCE_MODE_PLAYBACK;
-import android.app.ActivityOptions;
import android.app.Application;
import android.car.media.CarMediaIntents;
import android.content.ComponentName;
@@ -29,8 +28,6 @@
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.util.Size;
-import android.view.Display;
-import android.view.View;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
@@ -188,19 +185,14 @@
}
@Override
- public void onClick(View v) {
- // Launch activity in the default app task container: the display area where
- // applications are launched by default.
- // If not set, activity launches in the calling TDA.
- ActivityOptions options = ActivityOptions.makeBasic();
- options.setLaunchDisplayId(Display.DEFAULT_DISPLAY);
- MediaSource mediaSource = mSourceViewModel.getPrimaryMediaSource().getValue();
+ public Intent getIntent() {
+ MediaSource mediaSource = getMediaSourceViewModel().getPrimaryMediaSource().getValue();
Intent intent = new Intent(CarMediaIntents.ACTION_MEDIA_TEMPLATE);
if (mediaSource != null) {
intent.putExtra(EXTRA_MEDIA_COMPONENT,
mediaSource.getBrowseServiceComponentName().flattenToString());
}
- v.getContext().startActivity(intent, options.toBundle());
+ return intent;
}
diff --git a/tests/src/com/android/car/carlauncher/homescreen/CardPresenterTest.java b/tests/src/com/android/car/carlauncher/homescreen/CardPresenterTest.java
index 43bea36..f5e754f 100644
--- a/tests/src/com/android/car/carlauncher/homescreen/CardPresenterTest.java
+++ b/tests/src/com/android/car/carlauncher/homescreen/CardPresenterTest.java
@@ -55,14 +55,6 @@
@Override
public void setModels(List<HomeCardInterface.Model> models) {
}
-
- @Override
- public void onViewCreated() {
- }
-
- @Override
- public void onViewDestroyed() {
- }
};
mPresenter.setView(mView);
}
diff --git a/tests/src/com/android/car/carlauncher/homescreen/assistive/AssistiveCardPresenterTest.java b/tests/src/com/android/car/carlauncher/homescreen/assistive/AssistiveCardPresenterTest.java
index 402f081..f8851e4 100644
--- a/tests/src/com/android/car/carlauncher/homescreen/assistive/AssistiveCardPresenterTest.java
+++ b/tests/src/com/android/car/carlauncher/homescreen/assistive/AssistiveCardPresenterTest.java
@@ -24,7 +24,7 @@
import android.view.View;
-import com.android.car.carlauncher.homescreen.HomeCardInterface;
+import com.android.car.carlauncher.homescreen.HomeCardFragment;
import com.android.car.carlauncher.homescreen.ui.CardHeader;
import com.android.car.carlauncher.homescreen.ui.DescriptiveTextView;
@@ -48,7 +48,7 @@
@Mock
private View mFragmentView;
@Mock
- private HomeCardInterface.View mView;
+ private HomeCardFragment mView;
@Mock
private AssistiveModel mModel;
@Mock
@@ -66,11 +66,9 @@
@Test
public void onModelUpdated_updatesFragment() {
mPresenter.onModelUpdated(mModel);
- mPresenter.onViewClicked(mFragmentView);
verify(mView).updateHeaderView(CARD_HEADER);
verify(mView).updateContentView(CARD_CONTENT);
- verify(mModel).onClick(mFragmentView);
}
@Test
@@ -80,13 +78,10 @@
reset(mView);
mPresenter.onModelUpdated(mOtherModel);
- mPresenter.onViewClicked(mFragmentView);
verify(mView, never()).hideCard();
verify(mView, never()).updateHeaderView(any());
verify(mView, never()).updateContentView(any());
- verify(mModel).onClick(mFragmentView);
- verify(mOtherModel, never()).onClick(any());
}
@Test
diff --git a/tests/src/com/android/car/carlauncher/homescreen/audio/HomeAudioCardPresenterTest.java b/tests/src/com/android/car/carlauncher/homescreen/audio/HomeAudioCardPresenterTest.java
index 1a15d52..6836bd5 100644
--- a/tests/src/com/android/car/carlauncher/homescreen/audio/HomeAudioCardPresenterTest.java
+++ b/tests/src/com/android/car/carlauncher/homescreen/audio/HomeAudioCardPresenterTest.java
@@ -24,7 +24,6 @@
import android.view.View;
-import com.android.car.carlauncher.homescreen.HomeCardInterface;
import com.android.car.carlauncher.homescreen.ui.CardHeader;
import com.android.car.carlauncher.homescreen.ui.DescriptiveTextView;
import com.android.car.carlauncher.homescreen.ui.DescriptiveTextWithControlsView;
@@ -49,7 +48,7 @@
@Mock
private View mFragmentView;
@Mock
- private HomeCardInterface.View mView;
+ private AudioFragment mView;
@Mock
private AudioModel mModel;
@Mock
@@ -67,11 +66,9 @@
@Test
public void onModelUpdated_updatesFragment() {
mPresenter.onModelUpdated(mModel);
- mPresenter.onViewClicked(mFragmentView);
verify(mView).updateHeaderView(CARD_HEADER);
verify(mView).updateContentView(CARD_CONTENT);
- verify(mModel).onClick(mFragmentView);
}
@Test
@@ -81,13 +78,10 @@
reset(mView);
mPresenter.onModelUpdated(mOtherModel);
- mPresenter.onViewClicked(mFragmentView);
verify(mView, never()).hideCard();
verify(mView, never()).updateHeaderView(any());
verify(mView, never()).updateContentView(any());
- verify(mModel).onClick(mFragmentView);
- verify(mOtherModel, never()).onClick(any());
}
@Test