npm package: @lukiteam/react-native-luki-general
Description: Contains native modules used in the luki application
Author: Luki Team
Latest version: 0.2.61

# react-native-luki-general

Contains native modules used in the luki application

## Installation

```sh
npm install @lukiteam/react-native-luki-general
```

## Usage

### getImageSize

```js
import { getImageSize } from '@lukiteam/react-native-luki-general';

type ImageSize = {
  width: number;
  height: number;
};

const uri = 'content://media/external/images/media/123';

try {
  const size = await getImageSize(uri);
  console.log('Image size:', size.width, size.height);
} catch (error) {
  console.error('Failed to get image size:', error);
}
```

### LukiGeneralEventEmitter - onPhotoLibraryChange

```js
import { LukiGeneralEventEmitter } from '@lukiteam/react-native-luki-general';

useEffect(() => {
  const subscription = LukiGeneralEventEmitter.addListener(
    'onPhotoLibraryChange',
    () => {
      // You can re-fetch albums or photos here
      refreshAlbumsAndPhotos();
    }
  );

  return () => {
    subscription.remove();
  };
}, []);
```

### isImageMirrored

```js
import { isImageMirrored } from '@lukiteam/react-native-luki-general';

const mirrored = await isImageMirrored(uri);
console.log('Is mirrored:', mirrored); // response true or false
```

### CopyToClipboard

```js
import { copyToClipboard } from '@lukiteam/react-native-luki-general';

const text = 'Kopyalanan metin/ Copied sentence';
await copyToClipboard(text);
```

### startCallAudio

```js
import { startCallAudio } from '@lukiteam/react-native-luki-general';

await startCallAudio();
console.log('Call mod has made to activated!');
```

### stopCallAudio

```js
import { stopCallAudio } from '@lukiteam/react-native-luki-general';

await stopCallAudio();
console.log('Call mod stopped.');
```

### getAudioRoutes

```js
type AudioRoute = {
  id: 'receiver' | 'speaker' | 'wired' | 'bluetooth';
  type: 'receiver' | 'speaker' | 'wired' | 'bluetooth';
  name: string;
  selected: boolean;
  selectable: boolean;
};

import { getAudioRoutes } from '@lukiteam/react-native-luki-general';

const routes = await getAudioRoutes();

routes.forEach(route => {
  console.log(`Output: ${route.name}, Selected: ${route.selected}`);
});

```

### startAudioRouteMonitor - stopAudioRouteMonitor - onAudioRouteChange

```js
import {
  startAudioRouteMonitor,
  stopAudioRouteMonitor,
  LukiGeneralEventEmitter,
} from '@lukiteam/react-native-luki-general';
import { useEffect } from 'react';

useEffect(() => {
  // starting monitor
  startAudioRouteMonitor();

  // fetching event by listen
  const sub = LukiGeneralEventEmitter.addListener(
    'onAudioRouteChange',
    (event) => {
      console.log('Audio output devices list has changed:', event);
      // event = { platform: "ios" | "android", outputType: "speaker" | "receiver" | "wired" | "bluetooth", ... }
    }
  );

  return () => {
    // Clear event sub
    sub.remove();
    stopAudioRouteMonitor();
  };
}, []);
```

### setKeepScreenOn

```js
import { setKeepScreenOn } from '@lukiteam/react-native-luki-general';
import { useEffect } from 'react';

export default function MyRecordingScreen() {
  useEffect(() => {
    // provide keep to wake the screen while calling
    setKeepScreenOn(true);

    return () => {
      // allow to sleep screen after finished call
      setKeepScreenOn(false);
    };
  }, []);

  return null;
}
```

### ensureBluetoothEligible

```js
import { ensureBluetoothEligible } from '@lukiteam/react-native-luki-general';

const checkBluetooth = async () => {
  try {
    const isEligible = await ensureBluetoothEligible();
    if (isEligible) {
      console.log('Bluetooth supporting and can use!');
    } else {
      console.warn('Bluetooth has not supported cannot use!');
    }
  } catch (error) {
    console.error('Bluetooth available control has been failed:', error);
  }
};
```

## License

MIT © Luki Team Organization

---

Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)