Skip to content

Commit

Permalink
Merge branch 'master' into TIMOB-20522
Browse files Browse the repository at this point in the history
  • Loading branch information
garymathews committed Feb 21, 2018
2 parents 9712e59 + 0724f73 commit e1a9da8
Show file tree
Hide file tree
Showing 13 changed files with 425 additions and 90 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -95,17 +95,25 @@ public boolean isProvider(String name)

public boolean getLocationServicesEnabled()
{
// Fetch all enabled location providers.
List<String> providerNames = locationManager.getProviders(true);
if ((providerNames == null) || (providerNames.size() <= 0)) {
return false;
}

// Log all providers currently enabled.
if (Log.isDebugModeEnabled()) {
Log.i(TAG, "Enabled location provider count: " + providerNames.size());

for (String providerName : providerNames) {
Log.i(TAG, providerName + " service available");
}
}

return providerNames.size() != 0 && getLastKnownLocation() != null;
// Only return true if location can be obtained via GPS or WiFi/Cellular.
// Ignore "passive" provider and "test" providers.
boolean isEnabled = providerNames.contains(LocationManager.GPS_PROVIDER);
isEnabled |= providerNames.contains(LocationManager.NETWORK_PROVIDER);
return isEnabled;
}

public Location getLastKnownLocation()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ public TiUIDrawerLayout(final DrawerLayoutProxy proxy)
this.activity = (AppCompatActivity) proxy.getActivity();
LayoutInflater inflater = LayoutInflater.from(this.activity);
layout = (DrawerLayout) inflater.inflate(id_drawer_layout, null, false);
layout.setDrawerListener(new DrawerListener());
toolbar = (Toolbar) layout.findViewById(id_toolbar);

// Check if the theme provides a default ActionBar
Expand Down Expand Up @@ -165,34 +164,6 @@ private void drawerSlideEvent(View drawerView, float slideOffset)
}
}

private class DrawerListener implements DrawerLayout.DrawerListener
{

@Override
public void onDrawerClosed(View drawerView)
{
drawerClosedEvent(drawerView);
}

@Override
public void onDrawerOpened(View drawerView)
{
drawerOpenedEvent(drawerView);
}

@Override
public void onDrawerSlide(View drawerView, float slideOffset)
{
drawerSlideEvent(drawerView, slideOffset);
}

@Override
public void onDrawerStateChanged(int state)
{
drawerStateChangedEvent(state);
}
}

public void toggleLeft()
{
if (layout.isDrawerOpen(Gravity.START)) {
Expand Down Expand Up @@ -254,40 +225,45 @@ public boolean isRightVisible()
private void initDrawerToggle()
{

AppCompatActivity activity = (AppCompatActivity) proxy.getActivity();
if (activity.getSupportActionBar() == null) {
final AppCompatActivity activity = (AppCompatActivity) proxy.getActivity();
if (activity == null) {
return;
}

activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
activity.getSupportActionBar().setHomeButtonEnabled(true);
if (activity.getSupportActionBar() != null) {
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
activity.getSupportActionBar().setHomeButtonEnabled(true);
}

drawerToggle = new ActionBarDrawerToggle(activity, layout, id_drawer_open_string, id_drawer_close_string) {
@Override
public void onDrawerClosed(View drawerView)
{
super.onDrawerClosed(drawerView);
drawerClosedEvent(drawerView);
}

@Override
public void onDrawerOpened(View drawerView)
{
super.onDrawerOpened(drawerView);
drawerOpenedEvent(drawerView);
}

@Override
public void onDrawerSlide(View drawerView, float slideOffset)
{
super.onDrawerSlide(drawerView, slideOffset);
drawerSlideEvent(drawerView, slideOffset);
}

@Override
public void onDrawerStateChanged(int state)
{
super.onDrawerStateChanged(state);
drawerStateChangedEvent(state);
}
};
layout.setDrawerListener(drawerToggle);
layout.addDrawerListener(drawerToggle);
layout.post(new Runnable() {
@Override
public void run()
Expand Down Expand Up @@ -586,7 +562,7 @@ public void release()
{
if (layout != null) {
layout.removeAllViews();
layout.setDrawerListener(null);
layout.removeDrawerListener(drawerToggle);
layout = null;
}
if (leftFrame != null) {
Expand Down Expand Up @@ -625,7 +601,9 @@ private int getDevicePixels(Object value)

private View getNativeView(TiViewProxy viewProxy)
{
View nativeView = viewProxy.getOrCreateView().getOuterView();
TiUIView view = viewProxy.getOrCreateView();
View outerView = view.getOuterView();
View nativeView = outerView != null ? outerView : view.getNativeView();
ViewGroup parentViewGroup = (ViewGroup) nativeView.getParent();
if (parentViewGroup != null) {
parentViewGroup.removeAllViews();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,10 @@ public void propertyChanged(String key, Object oldValue, Object newValue, KrollP
} else if (key.equals(TiC.PROPERTY_ENABLED)) {
tv.setEnabled(TiConvert.toBoolean(newValue));
} else if (key.equals(TiC.PROPERTY_VALUE)) {
//TIMOB-17210 Android: A textfield change listener is wrongly triggered also if the value is programmatically set before creation
disableChangeEvent = true;
tv.setText(TiConvert.toString(newValue));
disableChangeEvent = false;
} else if (key.equals(TiC.PROPERTY_MAX_LENGTH)) {
maxLength = TiConvert.toInt(newValue);
//truncate if current text exceeds max length
Expand Down Expand Up @@ -826,10 +829,14 @@ public void setAttributedStringText(AttributedStringProxy attrString)
Bundle bundleText =
AttributedStringProxy.toSpannableInBundle(attrString, TiApplication.getAppCurrentActivity());
if (bundleText.containsKey(TiC.PROPERTY_ATTRIBUTED_STRING)) {
//TIMOB-17210 Android: A textfield change listener is wrongly triggered also if the value is programmatically set before creation
boolean wasDisabled = disableChangeEvent;
disableChangeEvent = true;
tv.setText((Spannable) bundleText.getCharSequence(TiC.PROPERTY_ATTRIBUTED_STRING));
if (bundleText.getBoolean(TiC.PROPERTY_HAS_LINK, false)) {
tv.setMovementMethod(LinkMovementMethod.getInstance());
}
disableChangeEvent = wasDisabled;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@
import android.widget.Spinner;
import android.widget.TextView;

public class TiUINativePicker extends TiUIPicker implements OnItemSelectedListener
public class TiUINativePicker extends TiUIPicker
{
private static final String TAG = "TiUINativePicker";
private boolean firstSelectedFired = false;
private boolean nativeViewDrawn = false;
private static int defaultTextColor;
private static boolean setDefaultTextColor = false;

Expand Down Expand Up @@ -101,7 +101,6 @@ public TiUINativePicker(TiViewProxy proxy)
public TiUINativePicker(final TiViewProxy proxy, Activity activity)
{
this(proxy);

int spinnerId;
try {
spinnerId = TiRHelper.getResource("layout.titanium_ui_spinner");
Expand All @@ -111,14 +110,19 @@ public TiUINativePicker(final TiViewProxy proxy, Activity activity)
}
return;
}
Spinner spinner = (Spinner) activity.getLayoutInflater().inflate(spinnerId, null);
final Spinner spinner = (Spinner) activity.getLayoutInflater().inflate(spinnerId, null);

spinner.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop,
int oldRight, int oldBottom)
{
TiUIHelper.firePostLayoutEvent(proxy);
// Set the flag showing if the native view has been drawn
nativeViewDrawn = true;
// Attach the listener for the first time after
// all the setting up has finished.
spinner.setOnItemSelectedListener(onItemSelectedListener);
}
});

Expand All @@ -139,31 +143,23 @@ public boolean onTouch(View v, MotionEvent event)
setNativeView(spinner);
refreshNativeView();
preselectRows();

spinner.setOnItemSelectedListener(this);
}

private void preselectRows()
{
Spinner spinner = (Spinner) nativeView;
ArrayList<Integer> preselectedRows = getPickerProxy().getPreselectedRows();
if (preselectedRows == null || preselectedRows.size() == 0) {
return;
}
Spinner spinner = (Spinner) nativeView;
if (spinner == null)
return;
try {
spinner.setOnItemSelectedListener(null);
for (int i = 0; i < preselectedRows.size(); i++) {
Integer rowIndex = preselectedRows.get(i);
if (rowIndex == 0 || rowIndex.intValue() < 0) {
continue;
}
selectRow(i, rowIndex, false);
for (int i = 0; i < preselectedRows.size(); i++) {
Integer rowIndex = preselectedRows.get(i);
if (rowIndex == 0 || rowIndex.intValue() < 0) {
continue;
}
} finally {
spinner.setOnItemSelectedListener(this);
firstSelectedFired = true;
selectRow(i, rowIndex, false);
}
}

Expand Down Expand Up @@ -205,13 +201,17 @@ public int getSelectedRowIndex(int columnIndex)
protected void refreshNativeView()
{
// Don't allow change events here
suppressChangeEvent = true;
Spinner spinner = (Spinner) nativeView;
if (spinner == null) {
return;
}
try {
spinner.setOnItemSelectedListener(null);
if (nativeViewDrawn) {
// If we have drawn the spinner it has a selected item listener.
// Detach while the native view is refreshed to prevent
// unnecessary event triggers.
spinner.setOnItemSelectedListener(null);
}
int rememberSelectedRow = getSelectedRowIndex(0);
// Just one column - the first column - for now.
// Maybe someday we'll support multiple columns.
Expand All @@ -237,39 +237,37 @@ protected void refreshNativeView()
if (rememberSelectedRow >= 0) {
selectRow(0, rememberSelectedRow, false);
}

// The new adapter has been set.
// If the Spinner has been drawn reattach the onItemSelected listener here.
// If it has not been drawn yet, the listener will be attached in the
// onLayout lifecycle event.
if (nativeViewDrawn) {
spinner.setOnItemSelectedListener(onItemSelectedListener);
}
} catch (Throwable t) {
Log.e(TAG, "Unable to refresh native spinner control: " + t.getMessage(), t);
} finally {
suppressChangeEvent = false;
spinner.setOnItemSelectedListener(this);
}
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long itemId)
{
if (!firstSelectedFired) {
// swallow the first selected event that gets fired after the adapter gets set, so as to avoid
// firing our change event in that case.
firstSelectedFired = true;
return;
}
fireSelectionChange(0, position);
private final OnItemSelectedListener onItemSelectedListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long itemId)
{
fireSelectionChange(0, position);

// Invalidate the parent view after the item is selected (TIMOB-13540).
if (Build.VERSION.SDK_INT >= TiC.API_LEVEL_HONEYCOMB) {
// Invalidate the parent view after the item is selected (TIMOB-13540).
ViewParent p = nativeView.getParent();
if (p instanceof View) {
((View) p).invalidate();
}
}
}

@Override
public void onNothingSelected(AdapterView<?> arg0)
{
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
}
};

public void add(TiUIView child)
{
// Don't do anything. We don't add/remove views to the native picker (the Android "Spinner").
Expand Down Expand Up @@ -324,4 +322,4 @@ public void propertyChanged(String key, Object oldValue, Object newValue, KrollP
super.propertyChanged(key, oldValue, newValue, proxy);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import ti.modules.titanium.ui.TableViewProxy;
import ti.modules.titanium.ui.TableViewRowProxy;
import ti.modules.titanium.ui.widget.TiUILabel;
import ti.modules.titanium.ui.widget.TiUITableView;
import ti.modules.titanium.ui.widget.tableview.TableViewModel.Item;
import android.app.Activity;
import android.graphics.drawable.BitmapDrawable;
Expand Down Expand Up @@ -357,7 +358,16 @@ public void setRowData(TableViewRowProxy rp)
}
selectorSource = newSelectorSource;
if (selectorSource != null) {
rp.getTable().getTableView().getTableView().enableCustomSelector();
TableViewProxy tableViewProxy = rp.getTable();
if (tableViewProxy != null) {
TiUITableView tableView = tableViewProxy.getTableView();
if (tableViewProxy != null) {
TiTableView view = tableView.getTableView();
if (view != null) {
view.enableCustomSelector();
}
}
}
}

setBackgroundFromProxy(rp);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ protected IntentProxy prepareFileChooserIntent(PackageManager packageManager)

Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
contentSelectionIntent.setType("image/*");
contentSelectionIntent.setType("*/*");

Intent[] intentArray = null;
if (takePictureIntent != null) {
Expand Down
3 changes: 2 additions & 1 deletion android/templates/build/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.appcelerator.kroll.runtime.v8.V8Runtime;

import org.appcelerator.kroll.KrollExternalModule;
import org.appcelerator.kroll.common.KrollSourceCodeProvider;
import org.appcelerator.kroll.KrollModule;
import org.appcelerator.kroll.KrollModuleInfo;
import org.appcelerator.kroll.KrollRuntime;
Expand Down Expand Up @@ -62,7 +63,7 @@ public void onCreate()
try {
runtime.addExternalCommonJsModule(
"<%- module.manifest.moduleid %>",
(Class<KrollExternalModule>) Class.forName(className));
(Class<KrollSourceCodeProvider>) Class.forName(className));
} catch (Throwable ex) {
Log.e(TAG, "Failed to add external CommonJS module: " + className);
if ((ex instanceof RuntimeException) == false) {
Expand Down
2 changes: 1 addition & 1 deletion apidoc/Titanium/Geolocation/Geolocation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -811,7 +811,7 @@ properties:
On Android OS 2.2 and above, there is a new, "passive" location provider that is enabled
at all times, even when the user disables both the GPS and Network location providers.
Therefore, this method always returns `true` on these devices.
Therefore, this method returns `true` on these devices if only there is GPS or network provider available.
type: Boolean
permission: read-only

Expand Down

0 comments on commit e1a9da8

Please sign in to comment.