pt 1 in reviving the android build (copied from pm 28a1, wish me luck)

This commit is contained in:
wuggy 2026-04-08 15:43:25 -07:00
commit d7788a6d6d
4249 changed files with 468189 additions and 0 deletions

View file

@ -0,0 +1,177 @@
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.gecko.customtabs;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import org.mozilla.gecko.AppConstants;
import org.mozilla.gecko.GeckoApp;
import org.mozilla.gecko.GeckoAppShell;
import org.mozilla.gecko.R;
import org.mozilla.gecko.Tab;
import org.mozilla.gecko.Tabs;
import org.mozilla.gecko.util.ColorUtil;
import org.mozilla.gecko.util.GeckoRequest;
import org.mozilla.gecko.util.NativeJSObject;
import org.mozilla.gecko.util.ThreadUtils;
import java.lang.reflect.Field;
import static android.support.customtabs.CustomTabsIntent.EXTRA_TOOLBAR_COLOR;
public class CustomTabsActivity extends GeckoApp implements Tabs.OnTabsChangedListener {
private static final String LOGTAG = "CustomTabsActivity";
private static final String SAVED_TOOLBAR_COLOR = "SavedToolbarColor";
private static final String SAVED_TOOLBAR_TITLE = "SavedToolbarTitle";
private static final int NO_COLOR = -1;
private Toolbar toolbar;
private ActionBar actionBar;
private int tabId = -1;
private boolean useDomainTitle = true;
private int toolbarColor;
private String toolbarTitle;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
toolbarColor = savedInstanceState.getInt(SAVED_TOOLBAR_COLOR, NO_COLOR);
toolbarTitle = savedInstanceState.getString(SAVED_TOOLBAR_TITLE, AppConstants.MOZ_APP_BASENAME);
} else {
toolbarColor = NO_COLOR;
toolbarTitle = AppConstants.MOZ_APP_BASENAME;
}
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
updateActionBarWithToolbar(toolbar);
try {
// Since we don't create the Toolbar's TextView ourselves, this seems
// to be the only way of changing the ellipsize setting.
Field f = toolbar.getClass().getDeclaredField("mTitleTextView");
f.setAccessible(true);
TextView textView = (TextView) f.get(toolbar);
textView.setEllipsize(TextUtils.TruncateAt.START);
} catch (Exception e) {
// If we can't ellipsize at the start of the title, we shouldn't display the host
// so as to avoid displaying a misleadingly truncated host.
Log.w(LOGTAG, "Failed to get Toolbar TextView, using default title.");
useDomainTitle = false;
}
actionBar = getSupportActionBar();
actionBar.setTitle(toolbarTitle);
updateToolbarColor(toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
Tabs.registerOnTabsChangedListener(this);
}
@Override
public void onDestroy() {
super.onDestroy();
Tabs.unregisterOnTabsChangedListener(this);
}
@Override
public int getLayout() {
return R.layout.customtabs_activity;
}
@Override
protected void onDone() {
finish();
}
@Override
public void onTabChanged(Tab tab, Tabs.TabEvents msg, String data) {
if (tab == null) {
return;
}
if (tabId >= 0 && tab.getId() != tabId) {
return;
}
if (msg == Tabs.TabEvents.LOCATION_CHANGE) {
tabId = tab.getId();
final Uri uri = Uri.parse(tab.getURL());
String title = null;
if (uri != null) {
title = uri.getHost();
}
if (!useDomainTitle || title == null || title.isEmpty()) {
toolbarTitle = AppConstants.MOZ_APP_BASENAME;
} else {
toolbarTitle = title;
}
actionBar.setTitle(toolbarTitle);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(SAVED_TOOLBAR_COLOR, toolbarColor);
outState.putString(SAVED_TOOLBAR_TITLE, toolbarTitle);
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
private void updateActionBarWithToolbar(final Toolbar toolbar) {
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
if (ab != null) {
ab.setDisplayHomeAsUpEnabled(true);
}
}
private void updateToolbarColor(final Toolbar toolbar) {
if (toolbarColor == NO_COLOR) {
final int color = getIntent().getIntExtra(EXTRA_TOOLBAR_COLOR, NO_COLOR);
if (color == NO_COLOR) {
return;
}
toolbarColor = color;
}
final int titleTextColor = ColorUtil.getReadableTextColor(toolbarColor);
toolbar.setBackgroundColor(toolbarColor);
toolbar.setTitleTextColor(titleTextColor);
final Window window = getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(ColorUtil.darken(toolbarColor, 0.25));
}
}
}

View file

@ -0,0 +1,65 @@
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.gecko.customtabs;
import android.net.Uri;
import android.os.Bundle;
import android.support.customtabs.CustomTabsService;
import android.support.customtabs.CustomTabsSessionToken;
import android.util.Log;
import org.mozilla.gecko.GeckoProfile;
import org.mozilla.gecko.GeckoService;
import java.util.List;
/**
* Custom tabs service external, third-party apps connect to.
*/
public class GeckoCustomTabsService extends CustomTabsService {
private static final String LOGTAG = "GeckoCustomTabsService";
private static final boolean DEBUG = false;
@Override
protected boolean updateVisuals(CustomTabsSessionToken sessionToken, Bundle bundle) {
Log.v(LOGTAG, "updateVisuals()");
return false;
}
@Override
protected boolean warmup(long flags) {
if (DEBUG) {
Log.v(LOGTAG, "warming up...");
}
GeckoService.startGecko(GeckoProfile.initFromArgs(this, null), null, getApplicationContext());
return true;
}
@Override
protected boolean newSession(CustomTabsSessionToken sessionToken) {
Log.v(LOGTAG, "newSession()");
// Pretend session has been started
return true;
}
@Override
protected boolean mayLaunchUrl(CustomTabsSessionToken sessionToken, Uri uri, Bundle bundle, List<Bundle> list) {
Log.v(LOGTAG, "mayLaunchUrl()");
return false;
}
@Override
protected Bundle extraCommand(String commandName, Bundle bundle) {
Log.v(LOGTAG, "extraCommand()");
return null;
}
}