blob: 0c114cc04a8cff84570fc236d21723c9369d4f00 [file] [log] [blame]
/*
* Copyright (C) 2020 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.messenger.core.ui.launcher;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.annotation.NonNull;
import androidx.lifecycle.ViewModelProvider;
import com.android.car.messenger.core.interfaces.AppFactory;
import com.android.car.messenger.core.models.UserAccount;
import com.android.car.messenger.core.ui.conversationlist.ConversationListFragment;
import com.android.car.messenger.core.util.L;
import com.android.car.ui.baselayout.Insets;
import com.android.car.ui.baselayout.InsetsChangedListener;
/**
* This is the launcher activity for the messaging app. This first routes to{@link
* ConversationListFragment} or displays an error when no {@link UserAccount} are found.
*/
public class MessageLauncherActivity extends FragmentActivity implements InsetsChangedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MessageLauncherViewModel viewModel =
new ViewModelProvider(this).get(MessageLauncherViewModel.class);
L.d("In onCreate: MessageLauncher");
viewModel
.getAccounts()
.observe(
this,
accounts -> {
L.d("Total number of accounts: " + accounts.size());
// First version only takes one device until multi-account support is
// added
UserAccount primaryAccount =
!accounts.isEmpty() ? accounts.get(0) : null;
String fragmentTag =
ConversationListFragment.getFragmentTag(primaryAccount);
Fragment fragment =
getSupportFragmentManager().findFragmentByTag(fragmentTag);
if (fragment == null) {
fragment = ConversationListFragment.newInstance(primaryAccount);
}
setContentFragment(fragment, fragmentTag);
});
}
private void setContentFragment(Fragment fragment, String fragmentTag) {
getSupportFragmentManager().executePendingTransactions();
while (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStackImmediate();
}
pushContentFragment(fragment, fragmentTag);
}
@Override
protected void onResume() {
L.d("On Resume of Message Activity.");
AppFactory.get().getDataModel().refreshUserAccounts();
super.onResume();
}
private void pushContentFragment(
@NonNull Fragment topContentFragment, @NonNull String fragmentTag) {
getSupportFragmentManager()
.beginTransaction()
.replace(android.R.id.content, topContentFragment, fragmentTag)
.addToBackStack(fragmentTag)
.commit();
}
@Override
public void onCarUiInsetsChanged(Insets insets) {
// Do nothing, this is just a marker that we will handle the insets in fragments.
// This is only necessary because the fragments are not immediately added to the
// activity when calling .commit()
}
}