blob: a9884bfdb88eac808143dc6dfa20fb06b30bbad7 [file] [log] [blame]
package com.chip.casting.app;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import com.chip.casting.AppParameters;
import com.chip.casting.DACProviderStub;
import com.chip.casting.DiscoveredNodeData;
import com.chip.casting.TvCastingApp;
import com.chip.casting.util.GlobalCastingConstants;
import java.util.Random;
public class MainActivity extends AppCompatActivity
implements CommissionerDiscoveryFragment.Callback,
ConnectionFragment.Callback,
SelectClusterFragment.Callback {
private static final String TAG = MainActivity.class.getSimpleName();
private TvCastingApp tvCastingApp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initJni();
Fragment fragment = CommissionerDiscoveryFragment.newInstance(tvCastingApp);
getSupportFragmentManager()
.beginTransaction()
.add(R.id.main_fragment_container, fragment, fragment.getClass().getSimpleName())
.commit();
}
@Override
public void handleCommissioningButtonClicked(DiscoveredNodeData commissioner) {
showFragment(ConnectionFragment.newInstance(tvCastingApp, commissioner));
}
@Override
public void handleCommissioningComplete() {
showFragment(SelectClusterFragment.newInstance(tvCastingApp));
}
@Override
public void handleContentLauncherSelected() {
showFragment(ContentLauncherFragment.newInstance(tvCastingApp));
}
@Override
public void handleMediaPlaybackSelected() {
showFragment(MediaPlaybackFragment.newInstance(tvCastingApp));
}
@Override
public void handleDisconnect() {
showFragment(CommissionerDiscoveryFragment.newInstance(tvCastingApp));
}
/**
* The order is important, must first new TvCastingApp to load dynamic library, then
* AndroidChipPlatform to prepare platform, then start ChipAppServer, then call init on
* TvCastingApp
*/
private void initJni() {
tvCastingApp = new TvCastingApp();
Context applicationContext = this.getApplicationContext();
AppParameters appParameters = new AppParameters();
byte[] rotatingDeviceIdUniqueId =
new byte[AppParameters.MIN_ROTATING_DEVICE_ID_UNIQUE_ID_LENGTH];
new Random().nextBytes(rotatingDeviceIdUniqueId);
appParameters.setRotatingDeviceIdUniqueId(rotatingDeviceIdUniqueId);
appParameters.setDacProvider(new DACProviderStub());
appParameters.setSetupPasscode(GlobalCastingConstants.SetupPasscode);
appParameters.setDiscriminator(GlobalCastingConstants.Discriminator);
tvCastingApp.initApp(applicationContext, appParameters);
}
private void showFragment(Fragment fragment, boolean showOnBack) {
Log.d(
TAG,
"showFragment called with " + fragment.getClass().getSimpleName() + " and " + showOnBack);
FragmentTransaction fragmentTransaction =
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.main_fragment_container, fragment, fragment.getClass().getSimpleName());
if (showOnBack) {
fragmentTransaction.addToBackStack(null);
}
fragmentTransaction.commit();
}
private void showFragment(Fragment fragment) {
showFragment(fragment, true);
}
}